Dans MySQL, lorsque le contenu de la page de données mémoire et de la page de données disque est incohérent, la page mémoire est appelée une page sale. Scénarios pour vider les pages sales : 1. Lorsque le journal redo est plein, mysql suspendra toutes les opérations de mise à jour et synchronisera les pages sales correspondant à cette partie du journal sur le disque ; à éliminer. Si elles sont éliminées. Si les pages sales sont des pages sales, vous devez d'abord synchroniser les pages sales sur le disque. 3. MySQL pense que lorsque le système est inactif, il synchronisera les données de la mémoire sur le disque lorsqu'il y en aura. une opportunité. Il n’y a pas de problème de performances dans ce cas.
L'environnement d'exploitation de ce tutoriel : système windows7, version mysql8, ordinateur Dell G3.
Habituellement très rapidement Toutes les opérations de mise à jour sont écrites dans la mémoire et dans les journaux.
Il ne se synchronise
pas immédiatement avec la page de données du disque. À ce stade, le contenu de la page de données de la mémoire et de la page de données du disque est incohérent, ce que nous appelons page sale
. 不会马上同步
到磁盘数据页,这时内存数据页跟磁盘数据页内容不一致,我们称之为脏页
。
这里面就涉及 mysql 的内存管理机制
缓冲区中包含这三大类列表。分别为:LRUList
、FreeList
、FlushList
。
在数据库刚启动时,LRUlist中没有数据页
。FreeList存放空闲页。
注意:这时这个页既在LRUlist中,又在FlushList中。
总结:LRUList(管理已经被读取的页)和FreeList(管理空闲的页)用来管理页的可用性;FlushList(管理脏页)用来管理脏页的刷新
在脏页数据同步到磁盘过程中,如果对该磁盘数据页执行 SQL 语句。执行速度就会变慢
如果数据修改和读取只依赖内存的缓冲区,那么一旦数据库宕机,内存中的数据都会丢失。所以MySQL使用之前讲过的redo log来实现异常重启的数据恢复。
简单来说,就是在更新缓冲区之前,先写入redo log,保证异常重启之后可以正常恢复缓冲区中的数据。
数据库宕机,内存数据丢失
。所以需要刷新到磁盘。所以自然而然,我们就一定需要把内存中的脏页按照某种规则刷新到磁盘中,有了刷新这个操作,缓冲区的大小问题和redo log的大小问题都可以解决。
当 redo log 写满
,mysql就会暂停所有更新
操作,将同步这部分日志对应的脏页同步到磁盘
。
系统内存不足
时,需要淘汰
一部分数据页,如果淘汰的是脏页
,就要先将脏页同步到磁盘
。
MySQL 认为系统空闲
的时候,有机会就同步
内存数据到磁盘,这种没有性能问题。
MySQL 正常关闭
,MySQL 会把内存的脏页都同步到磁盘
上,这样下次 MySQL 启动的时候,就可以直接从磁盘上读数据,启动速度会很快。这种没有性能问题。
如果是 redo log 写满了
要尽量避免redo log 写满
。否则整个系统的更新都会停止。此时写的性能变为 0
,必须等待该日志对应脏页同步完成
LRUList
, FreeList
, FlushList
. 🎜🎜Lorsque la base de données est démarrée pour la première fois, il n'y a aucune page de données
dans la liste LRU. FreeList stocke les pages gratuites. 🎜🎜🎜Lorsqu'une page doit être lue, une page libre sera obtenue à partir de la FreeList. Après avoir lu les données, elle sera placée dans la LRUlist. 🎜🎜S'il n'y a pas de page libre dans la FreeList, alors la dernière page. dans la liste LRU sera éliminée selon l'algorithme LRU. La page 🎜🎜Lorsque la page dans la liste LRU est modifiée, la page devient une page sale, et cette page sera également ajoutée à la FlushList🎜🎜🎜🎜Remarque : à cette fois, la page est à la fois dans la LRUlist et dans la FlushList. 🎜🎜🎜Résumé : LRUList (gérer les pages qui ont été lues) et FreeList (gérer les pages gratuites) sont utilisés pour gérer la disponibilité des pages ; FlushList (gérer les pages sales) est utilisé pour gérer le rafraîchissement des pages sales🎜🎜Synchronisation des données sur les pages sales Pendant le processus d'accès au disque, si l'instruction SQL est exécutée sur la page de données du disque. La vitesse d'exécution deviendra plus lente🎜temps d'arrêt de la base de données et perte de données en mémoire
se produira. Il doit donc être vidé sur le disque. 🎜🎜Si le journal redo est infiniment volumineux ou contient de nombreux fichiers, il y aura un grand nombre d'opérations de modification dans le système. Une fois le système tombé en panne, le temps de récupération sera très long. 🎜🎜🎜Alors naturellement, nous devons 🎜vider les pages sales de la mémoire sur le disque 🎜 selon certaines règles. Avec l'opération de rafraîchissement, le problème de taille du tampon et le problème de taille du journal de rétablissement peuvent être résolus. 🎜🎜🎜Le tampon n'a pas besoin d'être infini, car il peut être conservé sur le disque. 🎜🎜Le journal redo n'a pas besoin d'être infini, car une fois conservé sur le disque, la partie correspondante des données dans le journal redo. peut être libéré. 🎜🎜redo log est plein
, mysql va mettre en pause toutes les opérations de mise à jour
, et synchroniser les pages sales correspondant à cette partie du journal sur le disque
. 🎜🎜🎜🎜Lorsque le système dispose de mémoire insuffisante
, il est nécessaire de éliminer
certaines pages de données. Si les pages sales
doivent être éliminées, supprimez-les d'abord. Les pages sales sont synchronisées sur le disque
. 🎜🎜🎜🎜MySQL pense que lorsque le système est inactif
, il synchronisera
les données de la mémoire sur le disque lorsqu'il en aura l'occasion. Il n'y a pas de problème de performances dans ce cas. . 🎜🎜🎜🎜MySQL s'arrête normalement
, MySQL synchronisera toutes les pages sales de la mémoire sur le disque
, afin qu'au prochain démarrage de MySQL, elles puissent être lues directement depuis les données du disque, la vitesse de démarrage sera très rapide. Il n’y a aucun problème de performances avec cela. 🎜🎜🎜journal de rétablissement soit plein
. Sinon, la mise à jour de l'ensemble du système s'arrêtera. A ce moment, les performances d'écriture deviennent 0
, et vous devez attendre que le journal correspondant à la synchronisation des pages sales soit terminé
avant de pouvoir être mis à jour. Cela entraînera le problème. l'exécution des instructions SQL est très lente. 🎜🎜【Recommandation associée : 🎜tutoriel vidéo mysql🎜】🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!