что такое грязная страница mysql

MySQL
что такое грязная страница mysql

Если ❤️моя статья оказалась полезной, ставьте лайк и подписывайтесь. Это самый большой стимул для меня продолжать техническое творчество.

грязные страницы (страницы памяти)

  • Чистые страницы: данные в памяти и на диске согласованы
  • Грязные страницы: противоречивые данные в памяти и на диске

Почему появляются грязные страницы

Обычно операции быстрого обновления — это запись памяти и логов. он не不会马上同步К странице данных диска, в настоящее время страница данных памяти несовместима с содержимым страницы данных диска, мы называем это脏页.

Это включает в себя механизм управления памятью mysql

Краткое описание механизма управления памятью

Буфер содержит списки этих трех категорий. Они есть:LRUList,FreeList,FlushList.

Когда база данных только запущена, в LRUlist没有数据页. FreeList хранит бесплатные страницы.

  • Когда страницу необходимо прочитать, из FreeList будет получена свободная страница, а после считывания данных она будет помещена в LRUlist.
  • Если в FreeList нет свободной страницы, то последняя страница в списке Lru отсеивается по алгоритму LRU
  • Когда страница в списке LRUlist изменяется, она становится грязной страницей, и эта страница также будет добавлена ​​в список FlushList.

Примечание. В настоящее время эта страница находится как в LRUlist, так и в FlushList.

Резюме: LRUList (управление прочитанными страницами) и FreeList (управление свободными страницами) используются для управления доступностью страниц; FlushList (управление грязными страницами) используется для управления обновлением грязных страниц.

Во время синхронизации данных грязной страницы с диском, если оператор SQL выполняется на странице данных диска. Выполнение будет медленнее

Модификация и чтение данных зависят только от строки буфера.

Если модификация и чтение данных зависят только от буфера в памяти, то при выходе из строя базы данных данные в памяти будут потеряны. Поэтому MySQL использует журнал повторов, упомянутый ранее, для восстановления данных при аварийных перезапусках.Введение в журнал повторов см. в этой статье:MySQL-журнал повторов и бинлог

Проще говоря, перед обновлением буфера сделайте запись в журнал повторов, чтобы убедиться, что данные в буфере можно нормально восстановить после аварийного перезапуска.

Почему грязные страницы необходимо обновлять

  • Как упоминалось выше, данные только помещаются в буфер, и они появятся数据库宕机,内存数据丢失. Поэтому его нужно сбросить на диск.
  • Если журнал повторов бесконечно велик или содержит много файлов, в системе будет много операций модификации, и как только он выйдет из строя, время восстановления будет очень долгим.

Поэтому, естественно, мы должныГрязные страницы в памяти нужно сбросить на диск по определенным правилам, с помощью операции сброса проблема размера буфера и проблема размера журнала повторного выполнения могут быть решены.

  • Буфер не обязательно должен быть бесконечным, потому что его можно сохранить на диск.
  • Журнал повторов не обязательно должен быть бесконечным, потому что после его сохранения на диск соответствующая часть данных в журнале повторов может быть освобождена.

Существуют следующие 4 сценария очистки грязных страниц.

  1. когдаredo log 写满, mysql будет暂停所有更新операция, синхронизирует эту часть журнала, соответствующую脏页同步到磁盘.

  2. система内存不足, нужно淘汰Часть страниц данных, если они удалены脏页, к先将脏页同步到磁盘.

  3. MySQL считает, что система空闲когда есть шанс同步Данные в памяти на диск, это не имеет проблем с производительностью.

  4. MySQL 正常关闭, MySQL будет内存的脏页都同步到磁盘так что при следующем запуске MySQL данные можно будет считывать прямо с диска, и скорость запуска будет очень быстрой. Это не имеет проблем с производительностью.

влияние

1 Если журнал повторов заполнен

избегатьredo log 写满. В противном случае обновление всей системы остановится.此时写的性能变为 0, должен дождаться, пока журнал будет соответствовать脏页同步完成Его можно обновить только после этого, что приведет к очень медленному выполнению оператора sql.