Spec-Zone.ru › MySQL 8.4

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

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

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

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

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

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

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

Сведения о характеристиках производительности индексов хеширования см. в Разделе 10.3.9 «Сравнение индексов B-дерева и хеширования».

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

Spec-Zone.ru

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