Spec-Zone.ru › MySQL 5.7

8.10.2 Кэш ключей MyISAM

  • 8.10.2.1 Доступ к общему кэшу ключей
  • 8.10.2.2 Несколько кэшей ключей
  • 8.10.2.3 Стратегия вставки в середину
  • 8.10.2.4 Предварительная загрузка индексов
  • 8.10.2.5 Размер блока кэша ключей
  • 8.10.2.6 Перестройка кэша ключей

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Spec-Zone.ru

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