mysql死锁排查_mysql 死锁问题排查

复制代码
应用访问Mysql数据库的时候,如果业务逻辑写的不严谨,不规范,就会发生死锁,如果此业务逻辑调用并发高,则业务日志经常会有死锁的错误日志产生。应用发生死锁,于是dba就去排查,看数据库的错误日志,就会发现,没有任何关于死锁的日志告警,这是因为默认配置情况下,数据库是不打印任何死锁的日志信息。

 那如何去排查应用的死锁问题呢,下面给大家详细介绍。先看看关于死锁信息打印的参数,默认是关闭

mysql> show variables like 'innodb\_print\_all\_deadlocks';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| innodb_print_all_deadlocks | OFF   |
+----------------------------+-------+
1 row in set (0.01 sec)

想要在发生死锁的情况打印相关信息,需要开启这个参数

复制代码
mysql> set global innodb_print_all_deadlocks=on;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'innodb\_print\_all\_deadlocks';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| innodb_print_all_deadlocks | ON    |
+----------------------------+-------+
1 row in set (0.01 sec)

开启之后,下面模拟一个死锁的场景
开启会话1,执行如下语句

复制代码
mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> update t_test10 set name='test33' where id='1';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

mysql> update t_test10 set name='testkii' where id='4';
Query OK, 0 rows affected (5.38 sec)
Rows matched: 1  Changed: 0  Warnings: 0

开启会话2,执行如下语句

复制代码
mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> update t_test10 set name='testkii' where id='4';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

mysql> update t_test10 set name='test33' where id='1';
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

在会话2里,可以很明显的看到,mysql检测到Deadlock,并回滚了会话2的sql,让会话的事物能继续进行。那mysql怎么选择回滚那个会话呢,主要从回滚代价上去考虑的,谁的锁持有的少,则回滚对应的会话事物。下面看看数据库的死锁详细信息看看

在数据库告警日志可以找死锁发生时,对应的sql语句和应用访问用户,应用访问IP,有了这些只会,再去找开发,看对应的代码逻辑,就能很容易的定位到问题,并解决。

相关推荐
木木子222 小时前
# 密码强度检测深度解析:正则表达式实时分析、多维度评分算法与可视化反馈
mysql·算法·华为·正则表达式·harmonyos
阿成学长_Cain6 小时前
Linux ipcs 命令超全详解:查看共享内存 / 消息队列 / 信号量,IPC 运维必备
linux·运维·服务器·网络·数据库
一嘴一个橘子8 小时前
mysql 创建表
mysql
OceanBase数据库官方博客8 小时前
OceanBase AI 时代,数据库的变与不变(技术解析与实践)
数据库·人工智能·oceanbase
阿成学长_Cain10 小时前
Linux dirs命令详解|Bash目录堆栈管理快速切换目录实战教程
linux·运维·前端·数据库
ywl47081208710 小时前
Mysql 平衡二叉树、红黑树、B树、B+树区别以及应用场景(五)
数据库·b树·mysql
IvorySQL11 小时前
IvorySQL Agent 探索与实践
数据库·人工智能·postgresql·oracle·ivorysql
作陪11 小时前
小白也能看懂的 SQL 零基础教程:从关系模型到事务全解
mysql
SelectDB12 小时前
美团数十 PB 规模 Apache Doris 实践:从统一 OLAP 到 AI-Native 数据基座
大数据·数据库·性能优化
Database_Cool_12 小时前
阿里云RDS主从延迟解决方案_只读实例半同步复制最佳实践
数据库·人工智能