Spec-Zone .ru
спецификации, руководства, описания, API

8.9.1. InnoDB Пул буферов

InnoDB поддерживает область хранения, названную пулом буферов для того, чтобы кэшировать данные, и индексирует в памяти. Знание, как InnoDB работы пула буферов, и использование в своих интересах этого, чтобы сохранить данные, к которым часто получают доступ, в памяти, являются важным аспектом настройки MySQL.

Направляющие линии

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

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

С 64-разрядными системами с размерами памяти большой емкости можно разделить пул буферов на многократные части, чтобы минимизировать конкуренцию для структур памяти среди параллельных операций. Для получения дополнительной информации см. Раздел 14.2.4.2.27, "Улучшения Производительности от Многократных Пулов буферов".

Внутренние Детали

InnoDB управляет пулом как списком, используя изменение последнего использованного алгоритма (LRU). Когда комната необходима, чтобы добавить новый блок к пулу, InnoDB выселяет последний использованный блок и добавляет новый блок к середине списка. Эта "стратегия вставки средней точки" обрабатывает список как два подсписка:

Этот алгоритм сохраняет блоки, которые в большой степени используются запросами в новом подсписке. Старый подсписок содержит менее используемые блоки; эти блоки являются кандидатами на замещение.

Алгоритм LRU работает следующим образом по умолчанию:

По умолчанию блоки, считанные запросами сразу, перемещаются в новый подсписок, означая, что они будут оставаться в пуле буферов в течение долгого времени. Сканирование таблицы (такой как выполняющийся для mysqldump работы, или a SELECT оператор без WHERE пункт), может принести большой объем данных в пул буферов и выселить эквивалентное количество более старых данных, даже если новые данные никогда не используются снова. Точно так же блоки, которые загружаются фоновым потоком чтения вперед и затем получаются доступ только однажды перемещение главе нового списка. Эти ситуации могут продвинуть часто используемые блоки к старому подсписку, где они становятся подвергающимися замещению.

Параметры конфигурации

Несколько InnoDB системные переменные управляют размером пула буферов и позволяют Вам настраивать алгоритм LRU:

Установка innodb_old_blocks_time больше чем 0 препятствует тому, чтобы одноразовые сканирования таблицы лавинно разослали новый подсписок с блоками, используемыми только для сканирования. К строкам в блочном чтении в для сканирования получают доступ много раз в быстрой последовательности, но блок неиспользован после этого. Если innodb_old_blocks_time устанавливается в значение, больше чем время обработать блок, блок остается в "старом" подсписке и возрастах к хвосту списка быть выселенным быстро. Таким образом, блоки, используемые только для одноразового сканирования, не действуют в ущерб в большой степени используемым блокам в новом подсписке.

innodb_old_blocks_time может быть установлен во времени выполнения, таким образом, можно изменить его временно, выполняя операции, такие как сканирования таблицы и дампы:

SET GLOBAL innodb_old_blocks_time = 1000;... perform
        queries that scan tables ...SET GLOBAL innodb_old_blocks_time = 0;

Эта стратегия не применяется, если Ваше намерение состоит в том, чтобы "нагреть" пул буферов, заполняя ее контентом таблицы. Например, оценочные испытания часто выполняют таблицу или индексируют сканирование при запуске сервера, потому что те данные обычно были бы в пуле буферов после периода нормальной эксплуатации. В этом случае, отпуск innodb_old_blocks_time набор к 0, по крайней мере пока фаза разминки не полна.

Контроль Пула буферов

Вывод от Монитора Стандарта InnoDB содержит несколько полей в BUFFER POOL AND MEMORY раздел, которые принадлежат работе пула буферов алгоритм LRU:

young-making уровень и not уровень не будет обычно составлять в целом полную частоту успешных обращений пула буферов. Хиты для блоков в старом подсписке заставляют их перемещаться в новый подсписок, но хиты к блокам в новом подсписке заставляют их перемещаться к главе списка, только если они - определенное расстояние от главы.

Предыдущая информация от Монитора может помочь Вам принять LRU настраивающиеся решения:

Отметить

В секунду средние числа, обеспеченные в InnoDB Вывод монитора основан на прошедшем времени между текущим временем и в прошлый раз InnoDB Вывод монитора был напечатан.

Для получения дополнительной информации о Мониторах InnoDB, см. Раздел 14.2.4.4,"SHOW ENGINE INNODB STATUS и InnoDB Мониторы".