Spec-Zone.ru › MariaDB

Пул буферов InnoDB

Пул буферов InnoDB — ключевой компонент для оптимизации MariaDB. Он хранит данные и индексы, и его размер обычно следует делать как можно больше, чтобы как можно больше данных и индексов хранилось в памяти, уменьшая ввод-вывод на диск, являющийся основным узким местом.

Как работает пул буферов

Пул буферов пытается хранить часто используемые блоки в буфере и, по сути, работает как два подсписка: новый подсписок недавно использованной информации и старый подсписок более старой информации. По умолчанию 37% списка зарезервировано для старого списка.

Когда к новой информации, отсутствующей в списке, осуществляется доступ, она помещается в начало старого списка, самый старый элемент в старом списке удаляется, а все остальные элементы смещаются на одну позицию назад в списке.

Когда к информации, присутствующей в старом списке, осуществляется доступ, она перемещается в начало нового списка, а все элементы выше смещаются на одну позицию назад.

innodb_buffer_pool_size

Наиболее важная система переменных сервера — innodb_buffer_pool_size. Этот размер должен содержать большую часть активного набора данных вашего сервера, чтобы запросы SQL могли работать непосредственно с информацией в кэше пула буферов. Хорошим начальным значением является несколько гигабайт памяти, если у вас доступно столько ОЗУ. После того, как он прогреется и достигнет обычной нагрузки, должно быть очень мало innodb_buffer_pool_reads по сравнению с innodb_buffer_pool_read_requests. Следите за тем, как эти значения изменяются в течение минуты. Если изменение в innodb_buffer_pool_reads меньше 1% от изменения в innodb_buffer_pool_read_requests, то это хороший показатель использования. Если переменная состояния innodb_buffer_pool_wait_free увеличивается, значит, пула буферов недостаточно (или частота сброса недостаточна).

Обратите внимание, что до версии MariaDB 10.4.4 выделенная общая память составляет примерно на 10% больше указанного размера, так как дополнительное место также зарезервировано для управляющих структур и буферов.

Чем больше размер, тем дольше будет занимать инициализация. На современном 64-битном сервере с пулом памяти 10 ГБ это может занять пять секунд или больше. Увеличение innodb_buffer_pool_chunk_size на несколько порядков значительно уменьшит это время.

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

С версии MariaDB 10.2.2 пул буферов можно настраивать динамически, и введены новые переменные, которые могут повлиять на размер и производительность. Смотрите Динамическая настройка размера пула буферов InnoDB.

innodb_buffer_pool_instances

Функциональность, описанная ниже, была отключена в версии MariaDB 10.5 и удалена в версии MariaDB 10.6, так как первоначальные причины разделения пула буферов в основном отпали.

Если innodb_buffer_pool_size установлено более 1 ГБ, innodb_buffer_pool_instances делит пул буферов InnoDB на определенное количество экземпляров. По умолчанию в MariaDB 5.5 он был равен 1, но для больших систем с пулами буферов в несколько гигабайт, множество экземпляров может помочь уменьшить конкуренцию за одновременный доступ. По умолчанию в MariaDB 10.0 он равен 8, за исключением 32-битной Windows, где он зависит от значения innodb_buffer_pool_size. Каждый экземпляр управляет своими структурами данных и занимает равную долю общего размера пула буферов, например, если innodb_buffer_pool_size равен 4 ГБ, а innodb_buffer_pool_instances равен 4, каждый экземпляр будет равен 1 ГБ. Каждый экземпляр должен иметь размер как минимум 1 ГБ.

innodb_old_blocks_pct и innodb_old_blocks_time

По умолчанию зарезервированные 37% для старого списка можно настроить, изменив значение innodb_old_blocks_pct. Оно может принимать значения от 5% до 95%.

Переменная innodb_old_blocks_time задаёт задержку перед перемещением блока из старого в новый подсписок. 0 означает отсутствие задержки, в то время как значение по умолчанию установлено на 1000.

Прежде чем изменять эти значения от значений по умолчанию, убедитесь, что вы понимаете влияние и то, как ваша система в настоящее время использует буфер. Их основное назначение — уменьшить влияние полных сканирований таблиц, которые обычно редки, но объёмны, и ранее могли очищать весь буфер. Установка ненулевой задержки может помочь в ситуациях, когда полные сканирования таблиц выполняются быстро подряд.

Временное изменение этих значений также может быть полезно для предотвращения негативного влияния полного сканирования таблицы, как описано в логическом резервном копировании InnoDB.

Создание и восстановление пула буферов

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

С версии MariaDB 10.0 InnoDB может создавать дамп пула буферов перед остановкой сервера и восстанавливать его при повторном запуске. Если эта функция используется (по умолчанию с MariaDB 10.2), период разогрева не требуется. Используйте переменные системы innodb_buffer_pool_dump_at_shutdown и innodb_buffer_pool_load_at_startup для включения или отключения создания дампа пула буферов при выключении и восстановления при запуске соответственно.

Также возможно создать дамп пула буферов InnoDB в любой момент работы сервера и восстановить последний дамп в любой момент. Для этого можно установить специальные переменные системы innodb_buffer_pool_dump_now и innodb_buffer_pool_load_now в значение ON. В любом случае их значение всегда будет OFF.

Восстановление пула буферов, как при запуске, так и в любой момент, может быть прервано установкой innodb_buffer_pool_load_abort в значение ON.

Файл, содержащий дамп пула буферов, указан в переменной системы innodb_buffer_pool_filename.

См. также

  • Буферизация изменений InnoDB
  • Таблица Information Schema INNODB_BUFFER_POOL_STATS
  • Динамическая настройка размера пула буферов InnoDB
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проходит предварительный контроль со стороны MariaDB. Мнения, информация и мнения, выраженные в этом контенте, не обязательно отражают позицию MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/innodb-buffer-pool/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API