mysql查看死锁,mysql查看死锁的几种方式

首页 2025-10-16 13:25:57


在 MySQL 中查看死锁信息可以通过以下几种方式:

1. 查看最近一次死锁详情

使用 SHOW ENGINE INNODB STATUS 命令,其中包含最近一次死锁的详细信息:
sql
SHOW ENGINE INNODB STATUS;
 
在输出结果中,找到 LATEST DETECTED DEADLOCK 部分,里面会显示:
  • 死锁发生的时间
  • 参与死锁的事务 ID
  • 每个事务执行的 SQL 语句
  • 事务持有的锁和等待的锁

2. 开启死锁日志(推荐)

如果需要记录所有死锁信息,可以在 MySQL 配置文件中开启死锁日志:
  1. 编辑配置文件(my.cnf 或 my.ini):
    ini
    [mysqld]
    innodb_print_all_deadlocks = 1
    
     
     
  2. 重启 MySQL 服务使配置生效
  3. 死锁信息会被记录到 MySQL 的错误日志中,错误日志路径可以通过以下命令查看:
    sql
    SHOW VARIABLES LIKE 'log_error';
    
     
     

3. 实时监控死锁(通过 Performance Schema)

MySQL 5.7+ 可以通过 Performance Schema 监控死锁:
sql
-- 查看死锁事件
SELECT * FROM performance_schema.events_errors_summary_by_thread_by_error 
WHERE ERROR_NUMBER = 1213; -- 1213 是死锁的错误代码

-- 查看当前锁等待情况
SELECT * FROM performance_schema.data_locks;
SELECT * FROM performance_schema.data_lock_waits;
 

说明

  • 死锁是指两个或多个事务相互持有对方需要的锁而陷入无限等待的状态
  • MySQL 的 InnoDB 存储引擎会自动检测死锁,并选择其中一个事务进行回滚以解除死锁
  • 查看死锁信息有助于分析应用程序中的锁竞争问题,进而优化 SQL 语句或事务设计
通过以上方法,可以有效地监控和分析 MySQL 中的死锁情况。
MySQL连接就这么简单!本地远程、编程语言连接方法一网打尽
还在为MySQL日期计算头疼?这份加一天操作指南能解决90%问题
MySQL日志到底在哪里?Linux/Windows/macOS全平台查找方法在此
MySQL数据库管理工具全景评测:从Workbench到DBeaver的技术选型指南
MySQL密码忘了怎么办?这份重置指南能救急,Windows/Linux/Mac都适用
你的MySQL为什么经常卡死?可能是锁表在作怪!快速排查方法在此
MySQL单表卡爆怎么办?从策略到实战,一文掌握「分表」救命技巧
清空MySQL数据表千万别用错!DELETE和TRUNCATE这个区别可能导致重大事故
你的MySQL中文排序一团糟?记住这几点,轻松实现准确拼音排序!
别再混淆Hive和MySQL了!读懂它们的天壤之别,才算摸到大数据的门道