Spec-Zone.ru › MySQL 8.4

10.10.2 Кэш ключей MyISAM

  • 10.10.2.1 Доступ к общему кэшу ключей
  • 10.10.2.2 Несколько кэшей ключей
  • 10.10.2.3 Стратегия вставки в середину
  • 10.10.2.4 Предварительная загрузка индексов
  • 10.10.2.5 Размер блока кэша ключей
  • 10.10.2.6 Перестройка кэша ключей

Для минимизации ввода-вывода с диска хранилище MyISAM использует стратегию, используемую во многих системах управления базами данных. Оно использует механизм кэширования для хранения наиболее часто используемых блоков таблиц в памяти:

  • Для блоков индексов поддерживается специальная структура, называемая кэшем ключей (или буфером ключей). Структура содержит несколько буферов блоков, в которые помещаются наиболее часто используемые блоки индексов.

  • Для блоков данных MySQL не использует специального кэша. Вместо этого он полагается на кэш файловой системы операционной системы.

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

  • Несколько сеансов могут одновременно обращаться к кэшу.

  • Вы можете настроить несколько кэшей ключей и назначить индексы таблиц определенным кэшам.

Для управления размером кэша ключей используйте системную переменную key_buffer_size. Если эта переменная установлена в ноль, кэш ключей не используется. Кэш ключей также не используется, если значение key_buffer_size слишком мало для выделения минимального количества буферов блоков (8).

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

Блок индекса — это непрерывная единица доступа к файлам индекса MyISAM. Обычно размер блока индекса равен размеру узлов индексного дерева B. (Индексы представлены на диске с помощью структуры данных B-дерева. Узлы в нижней части дерева являются листовыми узлами. Узлы над листовыми узлами являются узлами, не являющимися листовыми.)

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

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

Если оказывается, что блок, выбранный для замены, был изменен, блок считается «грязным». В этом случае перед заменой его содержимое записывается в индекс таблицы, из которого он был получен.

Обычно сервер использует стратегию LRU (Least Recently Used): при выборе блока для замены он выбирает наименее недавно использованный блок индекса. Чтобы упростить этот выбор, модуль кэша ключей сохраняет все используемые блоки в специальном списке (цепочка LRU), упорядоченном по времени использования. Когда к блоку обращаются, он считается наиболее недавно используемым и помещается в конец списка. Когда блоки нужно заменить, блоки в начале списка являются наименее недавно использованными и становятся первыми кандидатами на удаление.

Хранилище InnoDB также использует алгоритм LRU для управления своим буфером пула. См. Раздел 17.5.1, «Буферный пул».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/myisam-key-cache.html

Spec-Zone.ru

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