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-замки, созданные в btr0sea.c, рассмотрите возможность увеличения количества разделов адаптивного хеш-индекса или отключение адаптивного хеш-индекса.
Сведения о характеристиках производительности хеш-индексов см. в Разделе 10.3.9, «Сравнение B-дерева и хеш-индексов».
© 2025 Oracle
Licensed under the GPLv2 License.