AHI命中率≈hash_searches/(hash_searches+hash_searches_btree),需结合负载场景判断:>95%说明高效,70%–95%属正常,
自适应哈希索引(Adaptive Hash Index, AHI)是 InnoDB 存储引擎的一项优化机制,它在运行时自动为频繁访问的索引页建立哈希索引,以加速等值查询(如 WHERE col = ?)。但 AHI 不是总启用、也不总是有效——它的实际价值取决于工作负载特征,而命中率是最直观的衡量指标。
InnoDB 通过 INFORMATION_SCHEMA.INNODB_METRICS 暴露 AHI 统计数据。关键指标有三个:
命中率 ≈ hash_searches / (hash_searches + hash_searches_btree)。建议用如下 SQL 实时计算:
SELECT ROUND(100 * i1.COUNT / (i1.COUNT + i2.COUNT), 2) AS `AHI_Hit_Ratio_%`, i1.COUNT AS `hash_searches`, i2.COUNT AS `hash_searches_btree` FROM INFORMATION_SCHEMA.INNODB_METRICS i1 JOIN INFORMATION_SCHEMA.INNODB_METRICS i2 ON i1.NAME = 'hash_searches' AND i2.NAME = 'hash_searches_btree';
命中率本身不能单独判断好坏,需结合场景解读:
AHI 并非对所有索引都生效,其行为受以下限制:
>、BETWEEN、LIKE 'abc%' 等均无法命中 AHIinnodb_adaptive_hash_index_parts 和总缓冲池大小共同决定,默认最多占用缓冲池约 1/8 内存默认开启 AHI 通常是合理的,但高并发写入或 OLAP 类混合负载下可评估关闭:
SET GLOBAL innodb_adaptive_hash_index = OFF;(重启失效)innodb_adaptive_hash_index = OFF
innodb_adaptive_hash_index_parts),除非观察到 hash_table_size 持续接近上限且命中率未饱和