MySQL 自适应哈希索引

自适应哈希索引

自适应哈希索引能够InnoDB在具有适当的工作负载组合和足够的缓冲池内存的系统上执行更像内存数据库,而不会牺牲事务功能或可靠性。自适应哈希索引由innodb_adaptive_hash_index 变量启用 ,或在服务器启动时由 关闭 --skip-innodb-adaptive-hash-index

根据观察到的搜索模式,使用索引键的前缀构建哈希索引。前缀可以是任意长度,也可能只有B-tree中的一些值出现在hash索引中。哈希索引是针对经常访问的索引页面按需构建的。

如果一个表几乎完全适合主内存,哈希索引通过启用任何元素的直接查找来加速查询,将索引值转换为某种指针。 InnoDB具有监视索引搜索的机制。如果InnoDB注意到查询可以从构建哈希索引中受益,它会自动这样做。

对于某些工作负载,哈希索引查找的加速大大超过了监视索引查找和维护哈希索引结构的额外工作。对自适应哈希索引的访问有时会成为繁重工作负载下的争用源,例如多个并发连接。使用LIKE运算符和% 通配符的查询 也往往不会受益。对于无法从自适应哈希索引中受益的工作负载,将其关闭可减少不必要的性能开销。由于很难提前预测自适应哈希索引功能是否适合特定系统和工作负载,请考虑在启用和禁用它的情况下运行基准测试。

在 MySQL 5.7 中,自适应哈希索引功能是分区的。每个索引都绑定到一个特定的分区,每个分区都由一个单独的闩锁保护。分区由innodb_adaptive_hash_index_parts 变量控制 。在早期版本中,自适应哈希索引功能由单个锁存器保护,这在繁重的工作负载下可能成为一个争用点。该 innodb_adaptive_hash_index_parts 变量默认设置为 8。最大设置为 512。

您可以在输出SEMAPHORES部分 监控自适应哈希索引的使用和争用 SHOW ENGINE INNODB STATUS。如果有许多线程在等待 rw-latch 中创建的btr0sea.c,请考虑增加自适应哈希索引分区的数量或禁用自适应哈希索引。

有关哈希索引的性能特征的信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值