Spec-Zone.ru › MySQL 5.7

14.5.3 Адаптивный индекс хеширования

Адаптивный индекс хеширования позволяет InnoDB работать более похожим образом на базу данных в оперативной памяти на системах с подходящим сочетанием рабочей нагрузки и достаточной памятью для буферного пула без потери транзакционных функций или надёжности. Адаптивный индекс хеширования включён переменной innodb_adaptive_hash_index, или выключен при запуске сервера --skip-innodb-adaptive-hash-index.

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

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

При некоторых рабочих нагрузках ускорение от поиска по индексу хеширования значительно превышает дополнительную работу по отслеживанию поиска в индексе и поддержанию структуры индекса хеширования. Доступ к адаптивному индексу хеширования может иногда стать источником конкуренции при больших объёмах рабочей нагрузки, таких как несколько одновременных объединений. Запросы с LIKE операторами и % подстановками также, как правило, не выигрывают. Для рабочих нагрузок, которые не выигрывают от адаптивного индекса хеширования, его отключение снижает ненужные накладные расходы на производительность. Поскольку трудно предсказать заранее, подходит ли функция адаптивного индекса хеширования для конкретной системы и рабочей нагрузки, рекомендуется провести бенчмаркинг с включённым и выключенным режимом.

В MySQL 5.7 функция адаптивного индекса хеширования разделена. Каждый индекс связан с определённым разделом, и каждый раздел защищён отдельным замком. Разделение контролируется переменной innodb_adaptive_hash_index_parts. В более ранних выпусках функция адаптивного индекса хеширования была защищена одним замком, который мог стать источником конкуренции при больших объёмах рабочей нагрузки. Переменная innodb_adaptive_hash_index_parts по умолчанию установлена в 8. Максимальное значение — 512.

Вы можете отслеживать использование и конфликтность адаптивного индекса хеширования в разделе SEMAPHORES вывода SHOW ENGINE INNODB STATUS. Если есть много потоков, ожидающих блокировок rw, созданных в btr0sea.c, рассмотрите возможность увеличения числа разделов адаптивного индекса хеширования или отключение адаптивного индекса хеширования.

Для получения информации о характеристиках производительности индексов хеширования см. Раздел 8.3.8, «Сравнение индексов B-дерева и хеширования».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/innodb-adaptive-hash.html

Spec-Zone.ru

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