Если ❤️моя статья оказалась полезной, ставьте лайк и подписывайтесь. Это самый большой стимул для меня продолжать техническое творчество.
грязные страницы (страницы памяти)
- Чистые страницы: данные в памяти и на диске согласованы
- Грязные страницы: противоречивые данные в памяти и на диске
Почему появляются грязные страницы
Обычно операции быстрого обновления — это запись памяти и логов.
он не不会马上同步
К странице данных диска, в настоящее время страница данных памяти несовместима с содержимым страницы данных диска, мы называем это脏页
.
Это включает в себя механизм управления памятью mysql
Краткое описание механизма управления памятью
Буфер содержит списки этих трех категорий. Они есть:LRUList
,FreeList
,FlushList
.
Когда база данных только запущена, в LRUlist没有数据页
. FreeList хранит бесплатные страницы.
- Когда страницу необходимо прочитать, из FreeList будет получена свободная страница, а после считывания данных она будет помещена в LRUlist.
- Если в FreeList нет свободной страницы, то последняя страница в списке Lru отсеивается по алгоритму LRU
- Когда страница в списке LRUlist изменяется, она становится грязной страницей, и эта страница также будет добавлена в список FlushList.
Примечание. В настоящее время эта страница находится как в LRUlist, так и в FlushList.
Резюме: LRUList (управление прочитанными страницами) и FreeList (управление свободными страницами) используются для управления доступностью страниц; FlushList (управление грязными страницами) используется для управления обновлением грязных страниц.
Во время синхронизации данных грязной страницы с диском, если оператор SQL выполняется на странице данных диска. Выполнение будет медленнее
Модификация и чтение данных зависят только от строки буфера.
Если модификация и чтение данных зависят только от буфера в памяти, то при выходе из строя базы данных данные в памяти будут потеряны. Поэтому MySQL использует журнал повторов, упомянутый ранее, для восстановления данных при аварийных перезапусках.Введение в журнал повторов см. в этой статье:MySQL-журнал повторов и бинлог
Проще говоря, перед обновлением буфера сделайте запись в журнал повторов, чтобы убедиться, что данные в буфере можно нормально восстановить после аварийного перезапуска.
Почему грязные страницы необходимо обновлять
- Как упоминалось выше, данные только помещаются в буфер, и они появятся
数据库宕机,内存数据丢失
. Поэтому его нужно сбросить на диск. - Если журнал повторов бесконечно велик или содержит много файлов, в системе будет много операций модификации, и как только он выйдет из строя, время восстановления будет очень долгим.
Поэтому, естественно, мы должныГрязные страницы в памяти нужно сбросить на диск по определенным правилам, с помощью операции сброса проблема размера буфера и проблема размера журнала повторного выполнения могут быть решены.
- Буфер не обязательно должен быть бесконечным, потому что его можно сохранить на диск.
- Журнал повторов не обязательно должен быть бесконечным, потому что после его сохранения на диск соответствующая часть данных в журнале повторов может быть освобождена.
Существуют следующие 4 сценария очистки грязных страниц.
-
когда
redo log 写满
, mysql будет暂停所有更新
операция, синхронизирует эту часть журнала, соответствующую脏页同步到磁盘
. -
система
内存不足
, нужно淘汰
Часть страниц данных, если они удалены脏页
, к先将脏页同步到磁盘
. -
MySQL считает, что система
空闲
когда есть шанс同步
Данные в памяти на диск, это не имеет проблем с производительностью. -
MySQL 正常关闭
, MySQL будет内存的脏页都同步到磁盘
так что при следующем запуске MySQL данные можно будет считывать прямо с диска, и скорость запуска будет очень быстрой. Это не имеет проблем с производительностью.
влияние
1 Если журнал повторов заполнен
избегатьredo log 写满
. В противном случае обновление всей системы остановится.此时写的性能变为 0
, должен дождаться, пока журнал будет соответствовать脏页同步完成
Его можно обновить только после этого, что приведет к очень медленному выполнению оператора sql.