SHOW ENGINE INNODB STATUS 看不到 latch 争用,因其仅输出事务级 lock 信息(如行锁、死锁),而 latch 是内存结构级同步原语,不走事务路径、不入等待队列;查 latch 必须用 SHOW ENGINE INNODB MUTEX,关注 wait counts 与 spin rounds。

latch 和 lock 是两类完全不同的机制,排查方向、工具、现象都得分开看——混在一起查,永远找不到根因。
为什么 show engine innodb status 看不到 latch 争用?
因为 show engine innodb status 只输出事务锁(lock)信息:当前持有/等待的行锁、表锁、死锁检测结果等。latch 是底层内存结构的同步原语,不走事务路径,也不进锁等待队列,所以它压根不会出现在这个命令里。
- 查 latch 必须用
show engine innodb mutex(注意是mutex,不是status) - 该命令输出的是每个 mutex/rwlock 的 wait counts 和 spin rounds,数值高说明线程频繁自旋或挂起等待
- 常见热点 latch 包括
log_sys->mutex(redo log 写入瓶颈)、buf_pool->mutex(buffer pool 访问竞争)、dict_sys->mutex(字典缓存争用) - MySQL 8.0+ 中部分 latch 已被分片(如 buf_pool 分成多个 instance),但若某一个 instance 的 wait count 显著高于其他,仍说明局部热点存在
“Waiting for table metadata lock” 是 lock 还是 latch?
这是典型的 MDL lock(Metadata Lock),属于事务锁体系,不是 latch。它由 server 层加锁,用于保护表结构变更期间的 DML/DDL 并发安全。现象是 show processlist 中状态卡在 Waiting for table metadata lock,且对应会话可能长期阻塞。
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
- 查源头:执行
select * from performance_schema.metadata_locks(需开启performance_schema且metadata_locks表已启用) - 定位阻塞者:结合
performance_schema.threads和events_statements_current查出哪个线程持有了 MDL 且未释放(比如长事务、未提交的 DDL、客户端断连但连接未清理) - 注意:MDL lock 不受
innodb_lock_wait_timeout控制,超时由lock_wait_timeout(默认 31536000 秒)决定,容易误判为“卡死” - 和 latch 无关——latch 不会出现在 processlist 状态里,也不会触发 MDL 类型的等待提示
如何判断是 latch 导致性能抖动而非 lock 阻塞?
关键看指标是否呈现“无明确等待链、CPU 使用率高、QPS 波动大但无长事务”的特征。latch 争用本质是 CPU 在忙等(spin)或内核态挂起(os_waits),不会像 lock 那样留下清晰的持有-等待关系。
- 确认方法:采集 30 秒内
show engine innodb mutex两次快照,计算 wait_count 差值;若某个 latch 的增量 > 1000/秒,基本可定性为热点 - 典型场景:
buf_pool->mutex高通常伴随大量随机读 + 小 buffer pool;log_sys->mutex高多见于高并发小事务刷 redo(尤其 sync_binlog=1 + innodb_flush_log_at_trx_commit=1) - 不要依赖
information_schema.innodb_lock_waits查 latch——这张表只记录事务锁等待,对 latch 完全不可见 - perf / pstack 抓栈能看到线程卡在类似
os_event_wait_low或ut_delay,这是 latch 等待的典型堆栈特征
真正难的是区分“latch 热点是配置不合理导致的”,还是“业务访问模式本身触发了 InnoDB 底层设计边界”。比如 buffer pool 太小引发频繁 page reorganization,或者唯一索引写入密度极高导致 dict_sys->mutex 成瓶颈——这些没法靠 kill session 解决,得调参数或改访问逻辑。










