已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
背景: 我负责一套订单系统,核心表 t_order 约 4200 万行、单表含所有二级索引约 18GB,InnoDB,MySQL 8.0.32,单主单从。业务写入 QPS 日常 800~1200(以 INSERT 为主,少量 UPDATE status),峰值 2000。主从延迟容忍 < 5s。现在需要在线新增一个二级索引 idx_merchant_status (merchant_id, status),业务方要求锁表窗口 ≤ 1s,最好 0 行锁。
现象与卡点:
之前在 800 万行 / 3GB 的表上用 ALTER TABLE ... ADD INDEX ... ALGORITHM=INPLACE, LOCK=NONE 加过索引,实际表现:索引构建约 40 分钟,期间 DML 正常但 P99 涨了约 30%;最后 commit 阶段有一次 ~800ms 的 MDL 等待(当时恰好有一个 3s 的慢 SELECT 没跑完)。整体可接受,但这次是 5 倍量级,我不确定:
已尝试的排查:
期望得到的答案形态: