已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
【背景】 我们是一套 MySQL 8.0.32 / InnoDB 的订单查询服务,核心表 t_order 约 5200 万行、单表 9.8GB(含二级索引)。高频查询按 (merchant_id, status, create_time) 联合索引取最近 50 条订单,EXPLAIN 结果 type=ref、key=idx_merchant_status_ct、rows≈1800、Extra 为空(无 Using filesort / Using temporary)。单次执行耗时稳定在 2~5ms,buffer pool 大小 16GB(机器 64GB),hit ratio 日常 99.5%+。
【现象】 压测到 200 QPS 持续 10 分钟时,P50 基本不变(6ms),但 P99 从 8ms 一路爬到 120~180ms,P999 超过 400ms。连接池 HikariCP max=50,业务侧 JDK 17。监控上能看到:
【已尝试的排查】
【期望得到的答案形态】
希望有实战经验的朋友给一个可落地的排查 checklist,最好带具体的 performance_schema 查询语句和阈值判断。