📢博客主页:https://blog.csdn.net/2301_779549673
📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 JohnKi 原创,首发于 CSDN🙉
📢未来很长,值得我们全力奔赴更美好的生活✨
文章目录
前些天发现了一个巨牛的 人工智能学习网站
,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到 网站。
🏳️🌈一、自适应哈希索引的作用?
- 自适应哈希索引可以使
InnoDB
存储引擎在不牺牲事务特性
和可靠性
以及缓冲池空间足够
的前提下提升效率,使用起来更像是一个内存数据库,哈希索引根据经常访问的索引页自动构建; - 根据InnoDB内部的监控机制,如果监控到某些查询通过建立哈希索引可以提高性能,则自动对这个页创建哈希索引,这个过程称为
自适应
,所以叫自适应哈希索引; - 如果表完全放在内存中,则哈希索引可以通过直接查找任何元素来加快查询速度
1.1 为什么要创建自适应哈希索引?
- InnoDB存储引擎的数据存储于B+树中,B+树通常只有3到5层,但从根节点到叶节点的寻路涉及到多层页面内记录的比较,即使所有路径上的页面都在内存中,也非常消耗CPU的资源
- InnoDB对寻路的开销进行了优化,比如寻路结束后将cursor缓存起来方便下次查询复用,尽可能的避免单词寻路开销,Adaptive hashindex(AHI)便是为此而设计,可以理解为B+树的索引
- 本质上是通过缩短寻路路径(SearchPath)从,而提升MySOL查询性能的一种方式
1.2 自适应哈希索引的Key-Value如何设置?
以查询条件为 key
,B+树页的地址为 value
的 HashIndex
1.3 自适应哈希索引在保存在哪里?
自适应哈希索引会占用缓冲池一部分内存区域,在缓冲池初始化后被初始化,为了避免AHI的锁竞争压力,AHI支持分区,可以使用 innodb_adaptive_hash_index_parts
参数配置分区个数,默认为8。
注意: 自适应哈希索引是InnoDB内部的优化方式,外部不能干预
🏳️🌈二、关于自适应哈希索引有哪些配置项?
通过设置系统变量 innodb_adaptive_hash_index
开启或关闭自适应哈希索引在选项文件中设置系统变量
innodb_adaptive_hash_index
= [1
|0
]实现开启与关闭- 通过命令行选项
--skip-innodb-adaptive-hash-index
也可以关闭自适应哈希索引
每个自适应散列索引被绑定到不同的分区中,每个分区有不同的锁保护,分区数量由系统变量innodb_adaptive_hash_index_parts
控制,默认值为8,最大值为 512。
🏳️🌈三、怎么查看自适应哈希索引的信息?
通过使用 SHOW ENGINE InnODB STATUS
访问 InnoDB
标准监视器输出中 INSERT BUFFERAND ADAPTIVE HASH INDEX
部分查看自适应哈希索引使用信息,如果锁争抢过多,可以考虑增加自适应哈希索引分区数量或禁用自适应哈希索引。
mysql> SHOW ENGINE INNODB STATUS\G
*************************** 1. row ***************************
Type: InnoDB
Name:
Status:
=====================================
... # 省略
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 0 merges
merged operations:
insert 0, delete mark 0, delete 0
discarded operations:
insert 0, delete mark 0, delete 0
# 字节为单位,占⽤内存空间总量
Hash table size 34679, node heap has 0 buffer(s)
Hash table size 34679, node heap has 0 buffer(s)
Hash table size 34679, node heap has 0 buffer(s)
Hash table size 34679, node heap has 0 buffer(s)
Hash table size 34679, node heap has 4 buffer(s)
Hash table size 34679, node heap has 0 buffer(s)
Hash table size 34679, node heap has 0 buffer(s)
Hash table size 34679, node heap has 1 buffer(s)
# 计算⾃适应hash索引带来的收益以及付出,确定是否开启⾃适应hash索引
0.00 hash searches/s, 0.00 non-hash searches/s
👥总结
本篇博文对 【MySQL】自适应哈希详解:作用、配置以及如何查看 做了一个较为详细的介绍,不知道对你有没有帮助呢
觉得博主写得还不错的三连支持下吧!会继续努力的~