Как MySQL вытесняет страницы из пула буферов?
Я пытаюсь понять внутренности MySQL. Я знаю, что в управлении буферным пулом MySQL есть старый / молодой список страниц, как показано здесь. И я знаю о сбросе старых грязных страниц, таких как объяснено здесь, и как настроить его здесь. Я также знаю, что MySQL использует алгоритм LRU для удаления страниц, как здесь.
Однако существует ли демон / поток буферного пула, который высвобождает страницы, доступные только для чтения (не грязные страницы), которые были перенесены в буферный пул с помощью оператора select? Существуют ли способы его настройки (например, когда я пропускаю 95% емкости буферного пула, начинаю исключать прочитанные страницы или сбрасывать грязные страницы). Другими словами, какие триггеры в алгоритме LRU высвобождают страницы из пула буферов (например, время, когда страница находится в пуле буферов, процент заполнения пула буферов, необходимость удаления страниц для загрузки новых страниц), регулируются ли они?
1 ответ
Промывка и выселение совершенно разные.
https://dev.mysql.com/doc/refman/5.5/en/glossary.html
MySQL будет сбрасывать грязные страницы в соответствии с innodb_max_dirty_pages_pct. По умолчанию размер страницы базы данных по умолчанию в InnoDB составляет 16 КБ, а максимальный параметр для innodb_max_dirty_pages_pct равен 99, так что толерантности к созданию грязных страниц не так много (хотя, как вы знаете по ссылке, вы приводите фактическое расписание очистки расчет немного сложнее).
После того, как они сброшены, они будут выселены, когда станут LRU.
MySQL использует LRU с подходом "стратегии вставки средней точки". https://dev.mysql.com/doc/refman/5.5/en/glossary.html