0

0

SQL数据库自适应哈希索引_AHI命中率分析

冷漠man

冷漠man

发布时间:2026-01-09 16:43:34

|

664人浏览过

|

来源于php中文网

原创

AHI命中率≈hash_searches/(hash_searches+hash_searches_btree),需结合负载场景判断:>95%说明高效,70%–95%属正常,

sql数据库自适应哈希索引_ahi命中率分析

自适应哈希索引(Adaptive Hash Index, AHI)是 InnoDB 存储引擎的一项优化机制,它在运行时自动为频繁访问的索引页建立哈希索引,以加速等值查询(如 WHERE col = ?)。但 AHI 不是总启用、也不总是有效——它的实际价值取决于工作负载特征,而命中率是最直观的衡量指标。

如何查看 AHI 当前命中率

InnoDB 通过 INFORMATION_SCHEMA.INNODB_METRICS 暴露 AHI 统计数据。关键指标有三个:

  • hash_searches:使用 AHI 成功完成的查找次数
  • hash_searches_btree:AHI 查找失败后回退到 B+ 树查找的次数
  • hash_table_size:当前哈希表占用的 slot 数量(反映内存开销)

命中率 ≈ 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 命中率高低说明什么

命中率本身不能单独判断好坏,需结合场景解读:

堆友
堆友

Alibaba Design打造的设计师全成长周期服务平台,旨在成为设计师的好朋友

下载
  • 高于 95%:说明 AHI 高效服务于当前负载,尤其是大量主键/唯一键等值查询,且数据局部性好(热点页反复访问)
  • 70%–95%:属正常范围,AHI 有一定收益,但部分查询仍需走 B+ 树,可能因索引区分度低、查询条件不匹配哈希构建规则(如范围查询、LIKE 前缀模糊)
  • 低于 50%:AHI 效益微弱,甚至可能成为负担。常见原因包括:频繁 DML 导致哈希表频繁重建、查询多为范围扫描或非等值条件、并发更新冲突引发哈希锁争用

影响 AHI 命中率的关键因素

AHI 并非对所有索引都生效,其行为受以下限制:

  • 仅对B+ 树二级索引的叶节点页(含主键聚簇索引)自动构建哈希映射,且仅针对整行记录的完整索引键(不支持前缀索引哈希)
  • 只加速 =、IN(单值)、IS NULL 类等值查找;>BETWEENLIKE 'abc%' 等均无法命中 AHI
  • 若某索引页被频繁修改(INSERT/UPDATE/DELETE),InnoDB 可能禁用该页的 AHI,避免哈希一致性维护开销
  • AHI 内存上限由 innodb_adaptive_hash_index_parts 和总缓冲池大小共同决定,默认最多占用缓冲池约 1/8 内存

是否需要关闭 AHI?怎么调优

默认开启 AHI 通常是合理的,但高并发写入或 OLAP 类混合负载下可评估关闭:

  • 临时关闭:SET GLOBAL innodb_adaptive_hash_index = OFF;(重启失效)
  • 永久关闭:配置文件中设置 innodb_adaptive_hash_index = OFF
  • 不建议盲目调大哈希分区数(innodb_adaptive_hash_index_parts),除非观察到 hash_table_size 持续接近上限且命中率未饱和
  • 更有效的优化方向是:确保高频等值查询走的是,减少全表扫描和非等值条件,控制单事务修改热点页数量

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

676

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

346

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1094

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

357

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

675

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

571

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

413

2024.04.29

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

3

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS教程
CSS教程

共754课时 | 18.3万人学习

【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 1.9万人学习

微信小程序开发之API篇
微信小程序开发之API篇

共15课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号