MySQL内存锁latch和事务锁lock有什么区别该如何排查?

秋宇吖_5916

秋宇吖_5916

2026-11-08

506人浏览

原创

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

mysql内存锁latch和事务锁lock有什么区别该如何排查?

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,且对应会话可能长期阻塞。

MySQL8 CRM Schema Design Expert
MySQL8 CRM Schema Design Expert

面向 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 解决,得调参数或改访问逻辑。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

mysql

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

2513

6

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.21

1519

5

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

895

5

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.19

3592

5

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.25

6208

4

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.08

1319

3

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.11

6471

4

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

2023.08.14

5562

7

mysql事务隔离级别
mysql事务隔离级别

mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

2023.08.16

7534

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 194人学习