Wenn in MySQL der Inhalt der Speicherdatenseite und der Festplattendatenseite inkonsistent ist, wird die Speicherseite als schmutzige Seite bezeichnet. Szenario zum Löschen schmutziger Seiten: 1. Wenn das Redo-Protokoll voll ist, unterbricht MySQL alle Aktualisierungsvorgänge und synchronisiert die diesem Teil des Protokolls entsprechenden schmutzigen Seiten mit der Festplatte. 2. Wenn der Systemspeicher nicht ausreicht, werden einige Datenseiten benötigt Wenn es sich um schmutzige Seiten handelt, müssen Sie diese zunächst mit der Festplatte synchronisieren. 3. MySQL geht davon aus, dass die Speicherdaten mit der Festplatte synchronisiert werden, wenn sie im Leerlauf sind Eine Chance. In diesem Fall liegt kein Leistungsproblem vor.
Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL8-Version, Dell G3-Computer.
Normalerweise sehr schnell Alle Aktualisierungsvorgänge werden in den Speicher und in die Protokolle geschrieben.
Es wird nicht sofort mit der Festplattendatenseite synchronisiert
. Zu diesem Zeitpunkt sind die Inhalte der Speicherdatenseite und der Festplattendatenseite inkonsistent, was wir als schmutzige Seite
bezeichnen. 不会马上同步
到磁盘数据页,这时内存数据页跟磁盘数据页内容不一致,我们称之为脏页
。
这里面就涉及 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
. 🎜🎜Beim ersten Start der Datenbank gibt es keine Datenseite
in der LRUlist. FreeList speichert kostenlose Seiten. 🎜🎜🎜Wenn eine Seite gelesen werden muss, wird eine freie Seite aus der FreeList abgerufen. Nach dem Lesen der Daten wird sie in die LRUlist eingefügt. 🎜🎜Wenn es keine freie Seite in der FreeList gibt, dann die letzte Seite in der LRU-Liste wird gemäß dem LRU-Algorithmus eliminiert Diesmal befindet sich die Seite sowohl in der LRUlist als auch in der FlushList. 🎜🎜🎜Zusammenfassung: LRUList (gelesene Seiten verwalten) und FreeList (freie Seiten verwalten) werden zum Verwalten der Seitenverfügbarkeit verwendet; FlushList (verschmutzte Seiten verwalten) wird zum Verwalten der Aktualisierung schmutziger Seiten verwendet. 🎜🎜Datensynchronisierung schmutziger Seiten Während Der Vorgang des Wechselns zur Festplatte, wenn die SQL-Anweisung auf der Datenseite der Festplatte ausgeführt wird. Die Ausführungsgeschwindigkeit wird langsamer 🎜Datenbankausfallzeiten und Speicherdatenverlust
auftreten > wird auftreten. Es muss also auf die Festplatte geleert werden. 🎜🎜Wenn das Redo-Log unendlich groß ist oder viele Dateien enthält, wird es eine große Anzahl von Änderungsvorgängen im System geben. Sobald das System ausfällt, ist die Wiederherstellungszeit sehr lang. 🎜🎜🎜Natürlich müssen wir die schmutzigen Seiten im Speicher nach bestimmten Regeln auf die Festplatte leeren. Mit dem Aktualisierungsvorgang können das Problem der Puffergröße und das Problem der Redo-Log-Größe gelöst werden. 🎜🎜🎜Der Puffer muss nicht unendlich sein, da er auf der Festplatte gespeichert werden kann. 🎜🎜Das Redo-Log muss nicht unendlich sein, da der entsprechende Teil der Daten im Redo-Log gespeichert wird, sobald er auf der Festplatte gespeichert ist freigegeben werden kann. 🎜🎜Redo-Log voll ist
, mysql pausiert alle Aktualisierungsvorgänge
und synchronisiert die ungültigen Seiten, die diesem Teil des Protokolls entsprechen, auf der Festplatte
. 🎜🎜🎜🎜Wenn das System nicht genügend Speicher
hat, müssen einige Datenseiten eliminiert
werden. Wenn die schmutzigen Seiten
entfernt werden sollen, entfernen Sie sie zuerst. Schmutzige Seiten werden mit der Festplatte synchronisiert
. 🎜🎜🎜🎜MySQL geht davon aus, dass das System die Speicherdaten bei Gelegenheit synchronisiert
mit der Festplatte synchronisiert. In diesem Fall liegt kein Leistungsproblem vor . 🎜🎜🎜🎜MySQL fährt normal herunter
, MySQL synchronisiert alle fehlerhaften Seiten im Speicher mit der Festplatte
, sodass sie beim nächsten Start von MySQL direkt gelesen werden können Die Startgeschwindigkeit wird aufgrund der Festplattendaten sehr hoch sein. Dabei gibt es keine Leistungsprobleme. 🎜🎜🎜Redo-Log voll ist
. Andernfalls wird die gesamte Systemaktualisierung gestoppt. Zu diesem Zeitpunkt beträgt die Schreibleistung 0
und Sie müssen warten, bis das Protokoll der Dirty Page-Synchronisierung abgeschlossen ist
, bevor es aktualisiert werden kann Die Ausführung von SQL-Anweisungen ist sehr langsam. 🎜🎜【Verwandte Empfehlung: 🎜MySQL-Video-Tutorial🎜】🎜Das obige ist der detaillierte Inhalt vonWas ist eine schmutzige MySQL-Seite?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!