Я пытаюсь настроить параметры пула буферов InnoDB flu sh в MySQL. innodb_adaptive_flushing
ВЫКЛ. Размер файла журнала составляет 4 ГБ с 2 файлами журнала. Таким образом, максимальный размер файла журнала будет 8 ГБ. innodb_adaptive_flushing_lwm
установлено на 40%.
Цитирование MySQL официальные документы -
innodb_adaptive_flushing_lwm
Defines the low water mark representing percentage of redo log capacity at which adaptive flushing is enabled. For more information, see Section 14.8.3.5, “Configuring Buffer Pool Flushing”.
When that threshold is crossed, adaptive flushing is enabled, even if the innodb_adaptive_flushing variable is disabled.
При указанных выше настройках максимальный возраст контрольной точки будет 5,67 ГБ, поэтому MySQL должен включать адаптивную очистку при регистрации размер достигает 3.402 ГБ (т.е. 5.67GB * 0.6
). Число незарегистрированных байтов уже достигло 4,45 ГБ, так почему же MySQL не разрешает адаптивную очистку на этом этапе? Каковы могут быть возможные причины этого?
Графики, представляющие эти показатели -
MySQL версия -
mysql Ver 14.14 Distrib 5.7.23, for Linux (x86_64) using EditLine wrapper
Чтобы завершить, все связанные настройки, связанные с очисткой пула буферов, которые могут вас заинтересовать -
innodb_adaptive_flushing - OFF
innodb_adaptive_flushing_lwm - 40
innodb_io_capacity - 1500
innodb_io_capacity_max - 5120
Max SSD disk IOPS from tests - 6000
innodb_max_dirty_pages_pct - 75
innodb_max_dirty_pages_pct_lwm - 40
innodb_lru_scan_depth - 250
Редактировать 1 -
Дополнительные переменные для справки.
innodb_log_file_size - 4GB
innodb_log_files_in_group - 2
innodb_buffer_pool_size - 10GB
Вот некоторый контекст, который может не иметь отношения к реальной проблеме, но я добавляю его здесь на случай, если он ответит на любой вопрос.
В моей MySQL настройке с innodb_max_dirty_pages_pct_lwm - 40
и innodb_buffer_pool_size - 10GB
размер грязной страницы в пуле буферов должен составлять около 4 ГБ. Но он вырос не более чем на 1 ГБ. Это означает, что произошла какая-то грязная очистка страницы, из-за которой он не мог создать до 4 ГБ.
Я думаю, что очистка страницы может происходить в основном по двум причинам.
Максимальный процент грязных страниц InnoDB увеличивается больше, чем innodb_max_dirty_pages_pct_lwm
Алгоритм адаптивной очистки считает, что с текущей скоростью записи в файл журнала и текущей скоростью очистки файлы журнала повторного заполнения будут заполняться быстро. Таким образом, это увеличивает скорость промывки. Если это увеличивает скорость очистки, это может привести к снижению производительности, проблемам с page_cleaner, увеличению объема дискового ввода-вывода.
Мы можем очень легко исключить (1), потому что, как я упоминал ранее, он не увеличился более чем на 1 ГБ. Так что, я думаю, это было связано с адаптивной промывкой. (MySQL не предоставляет никаких статистических данных, связанных с этим).
Чтобы подтвердить свою гипотезу, я продолжал отключать адаптивную очистку, чтобы она включалась только при нажатии innodb_adaptive_flushing_lwm
, но не и вот я прихожу в StackOverflow скулить по поводу своей проблемы.