You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PolarDB MySQL 8.0:开启AHI时ePQ并行查询反而更慢的原因?

PolarDB ePQ与InnoDB自适应哈希索引(AHI)冲突问题分析

问题原因确认

你的猜测完全正确,AHI与ePQ并行查询确实会引发严重的latch竞争,直接导致你遇到的性能下降、CPU飙升问题:

  • InnoDB的AHI默认采用分区式哈希索引设计,每个分区对应一个latch锁。当ePQ的多个工作线程同时访问同一个AHI分区时,会频繁触发latch的争抢与等待逻辑。
  • 并行线程数越多(如你设置的max_parallel_degree = 4),这种竞争越激烈,大量CPU时间会消耗在锁等待、上下文切换上,而非实际查询执行,最终出现并行效率低于串行的反常情况,同时RO节点CPU被占满。

处理建议

针对PolarDB for MySQL 8.0.2开启ePQ的场景,建议关闭AHI:

  1. 临时关闭(实例重启后失效):
    SET GLOBAL innodb_adaptive_hash_index = OFF;
    
  2. 永久关闭(需重启实例生效):
    在实例配置文件中添加或修改:
    innodb_adaptive_hash_index = OFF
    
  3. 效果验证:关闭AHI后,重新执行之前变慢的聚合查询,对比并行/串行执行耗时,同时监控RO节点的CPU使用率变化。

补充说明

  • 并非所有场景下AHI都会与ePQ冲突,但对于高并发聚合类查询(尤其是频繁访问相同数据集的查询),AHI的latch竞争问题会被ePQ的并行执行放大。
  • PolarDB后续版本针对该冲突有针对性优化,但在8.0.2版本中,关闭AHI是最直接有效的解决方式。

内容的提问来源于stack exchange,提问作者Kristen Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 04:42:27