Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL死锁问题定位思路

MySQL死锁问题定位思路

原创
作者头像
用户1272933
发布于 2020-03-18 11:56:39
发布于 2020-03-18 11:56:39
3.7K00
代码可运行
举报
文章被收录于专栏:DPDK性能优化DPDK性能优化
运行总次数:0
代码可运行

1.如何知道系统有没有发生过死锁,如何去查看发生过的锁

show status like ‘innodb_row_lock%'; 从系统启动到现在的数据

Innodb_row_lock_current_waits:当前正在等待锁的数量;

Innodb_row_lock_time :锁定的总时间长度,单位ms;

Innodb_row_lock_time_avg :每次等待所花平均时间;

Innodb_row_lock_time_max:从系统启动到现在等待最长的一次所花的时间;

Innodb_row_lock_waits :从系统启动到现在总共等待的次数。

平均时间和锁等待次数比较大的话,说明可能会存在锁争用情况

2. show engine innodb status

展示innodb存储引擎的运行状态

通过这个命令显示的内容比较多,其中有一项lasted detected deadlock 显示最近发生的死锁。

图中红色线条标注的是执行的SQL,以及加了什么锁,可以看出是在这行记录上加了X锁,没有gap锁。

3. 错误日志中查看历史发生过的死锁

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set global innodb_print_all_deadlocks=1;

上一个命令,只能看到最近发生的锁,如果我想看历史发生的锁怎么办? 执行这一句,更改innodb 的一个配置,innodb_print_all_deadlocks,打印所有的死锁。会将死锁的信息输出到mysql的错误日志中,默认是不输出,格式和show engine innodb status 是差不多的。

4. information_schema.innodb_locks

information_schema 数据库是mysql自带的,保存着关于MySQL服务器所维护的所有其他数据库的信息。其中innodb_locks表,记录了事务请求但是还没获得的锁,即等待获得的锁。

lock_id:锁的id,由锁住的空间id编号、页编号、行编号组成

lock_trx_id:锁的事务id。

lock_mode:锁的模式。S[,GAP], X[,GAP], IS[,GAP], IX[,GAP]

lock_type:锁的类型,表锁还是行锁

lock_table:要加锁的表。

lock_index:锁住的索引。

lock_space:innodb存储引擎表空间的id号码

lock_page:被锁住的页的数量,如果是表锁,则为null值。

lock_rec:被锁住的行的数量,如果表锁,则为null值。

lock_data:被锁住的行的主键值,如果表锁,则为null值。

5. information_schema.innodb_lock_waits

查看等待中的锁

requesting_trx_id:申请锁资源的事务id。

requested_lock_id:申请的锁的id。

blocking_trx_id:阻塞的事务id,当前拥有锁的事务ID。

blocking_lock_id:阻塞的锁的id,当前拥有锁的锁ID

6. information_schema.innodb_trx

查看已开启的事务

trx_id:innodb存储引擎内部事务唯一的事务id。

trx_state:当前事务的状态。

trx_started:事务开始的时间。

trx_requested_lock_id:等待事务的锁id,如trx_state的状态为LOCK WAIT,那么该值代表当前事务之前占用锁资源的id,如果trx_state不是LOCK WAIT的话,这个值为null。

trx_wait_started:事务等待开始的时间。

trx_weight:事务的权重,反映了一个事务修改和锁住的行数。在innodb的存储引擎中,当发生死锁需要回滚时,innodb存储引擎会选择该值最小的事务进行回滚。

trx_mysql_thread_id:正在运行的mysql中的线程id,show full processlist显示的记录中的thread_id。

trx_query:事务运行的sql语句

写在最后:

出现死锁问题时,可以查看系统设置的隔离级别,RR与RC在加锁粒度上存在很大区别,RR隔离级别因为加锁粒度更大,在并发更新表的场景下容易产生思索,通常是因为UPDATE语句的where条件所带的字段是普通索引,通常变更成唯一索引可以解决死锁问题。也可以评估业务系统是否兼容RC隔离级别,直接切换隔离级别。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
编辑精选文章
换一批
Mysql 安装教程
[root@localhost mysql]# rpm -qa| grep mariadb
用户10662715
2025/04/08
1070
Linux 环境搭建 MySQL8.0.28 主从同步环境
首先在介绍MySQL 主从时,我们来看看 DB-Engines 排行榜上四月数据库的变化,前三甲居然都有小幅度增长,相反增长迅猛的 PG 和 MongoDB 有所减少,一个月的增长趋势说明不了问题,下图是从 13 年开始的趋势图,Oracle 和 MySQL 渐渐趋平,学习了解 MySQL 还是很有必要的。下面开始进入正题。
JiekeXu之路
2022/05/17
1.1K0
Linux 环境搭建 MySQL8.0.28 主从同步环境
MySQL 8.0.19 Linux平台安装 Part 2
cat /data/mysql/data/mysql-error.log |grep password
bsbforever
2020/08/18
4630
Centos7安装mysql+keepalived 高可用环境[通俗易懂]
链接:https://downloads.mysql.com/archives/community/
全栈程序员站长
2022/09/06
6570
Centos7安装mysql+keepalived 高可用环境[通俗易懂]
CentOS7安装MariaDB的流程步骤
安装前需要彻底清除你的服务器计算机上原来安装过的mysql、maraidb的文件,不然会出现各种问题。 CentOS7安装MariaDB的流程步骤如下:
青山师
2023/05/05
1.4K0
centos7 安装 mysql 详解
下载地址 : https://dev.mysql.com/downloads/mysql/
IT小马哥
2020/03/18
1.3K0
手把手教你安装 MySQL InnoDB Cluster 8.0.34
大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来手把手教你安装 MySQL InnoDB Cluster 8.0.34,欢迎点击上方蓝字“JiekeXu DBA之路”关注我的公众号,标星或置顶,更多干货第一时间到达!
JiekeXu之路
2023/10/25
2.8K3
手把手教你安装 MySQL InnoDB Cluster 8.0.34
centos7 .*tar包安装 MySQL5.7
一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb [root@vmtest ~]# rpm -qa|grep mariadb mariadb-libs-5.5.44-2.el7.centos.x86_64 # 卸载系统自带的Mariadb [root@vmtest ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64 # 删除etc目录下的my.cnf [root@vmtest ~]# rm /etc/m
周小董
2019/07/09
1.2K0
11.3/11.4/11.5 MySQL安装
MySQL目录概要 MySQL的几个常用安装包:rpm、源码、二进制免编译 cd /usr/local/src //切换到下载源码包的目录 wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz //解压 mv mysql-5.6.35-linux-glibc2.
运维小白
2018/02/06
7340
新手001|CentOS7下源码安装MySQL5.7.6+
MySQL 安装方式分为: 源码安装,相应系统发行包安装(如 rpm, yum, apt-get 等)。生产中比较推荐使用二进制安装。 这里给大家推荐一篇源码安装,大家可以了解一下,这个可以用到学习源码之路。
阿炳数记
2019/02/27
9620
MySQL数据备份与恢复(二) -- xtrabackup工具
上一篇介绍了逻辑备份工具mysqldump,本文将通过应用更为广泛的物理备份工具xtrabackup来演示数据备份及恢复的第二篇内容(本文篇幅较长,建议收藏后阅读)。
俊才
2020/04/07
1.1K0
MySQL8.1.0版本正式发布带来哪些新特性?
2023年7月18日晚,MySQL官方网站正式发布了MySQL8.1.0与8.0.34版本.
终有救赎
2023/12/14
5920
MySQL8.1.0版本正式发布带来哪些新特性?
MySQL 5.7安装最佳实践
1、环境准备 OS: CentOS Linux release 7.4.1708 (Core) for VMware MySQL: mysql-5.7.24-linux-glibc2.12-x86_64
星哥玩云
2022/08/18
6420
CentOS 7.6 下MySQL 8.0.16编译安装
yum -y install ntpdate gcc gcc-c++ ncurses ncurses-devel cmake readline-devel zlib.x86_64 zlib-devel.x86_64 bison libcurl-* net-tool* tree nmap sysstat lrzsz dos2unix telnet.x86_64 nethogs iftop iotop unzip ftp.x86_
星哥玩云
2022/08/18
8510
11.6 MariaDB安装
安装mariadb cd /usr/local/src wget https://downloads.mariadb.com/MariaDB/mariadb-10.2.6/bintar-linux-glibc_214-x86_64/mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz tar zxvf mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz mv mariadb-10.2.6-linux-glibc_214-x86_64
运维小白
2018/02/06
1.1K0
CentOS 下 MySQL 服务搭建
添加的内容export PATH=$PATH:/usr/local/mysql5.7/bin
BUG弄潮儿
2022/04/15
7150
CentOS 下 MySQL 服务搭建
小白学习MySQL - 数据库软件和初始化安装
作为个人学习环境来说,搭建一套VMWare的环境,算是性价比最高的一种选择,当然你可以购买一些公有云服务器(有些则是免费的,例如Oracle Cloud,可参考《Oracle Cloud云端账号的注册过程》)。
bisal
2021/03/23
2.3K0
小白学习MySQL - 数据库软件和初始化安装
xtrabackup8.0.25 备份恢复MySQL server 8.0.25
1.安装xtrabackup工具版本为8.0.25-17 https://repo.percona.com/yum/percona-release-latest.noarch.rpm yum install percona-xtrabackup-80 [root@ck1 data]# xtrabackup --version xtrabackup: recognized server arguments: --datadir=/var/lib/mysql xtrabackup version 8.0.25
wangwei-dba
2021/06/21
1.4K0
mysql二进制安装与mysql密码破解
1、二进制格式mysql安装 1.1 下载二进制格式的mysql软件包(以5.7版本为例) [root@localhost ~]# cd /usr/src/ [root@localhost src]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz 1.2 解压软件包至/usr/local/ [root@localhost src]# tar -xf mysq
Alone-林
2022/08/20
1.4K0
【教你搭建服务器系列】(2)搭建服务器环境,安装JDK、MySQL、Redis、Tomcat、Nginx
在配置服务器环境的时候,需要下载很多东西,比如你要安装jdk,你可以使用yum命令;也可以使用ftp工具把预先下载的.gz 压缩包上传到服务器,然后解压安装。
HaC
2020/11/05
1.9K0
【教你搭建服务器系列】(2)搭建服务器环境,安装JDK、MySQL、Redis、Tomcat、Nginx
相关推荐
Mysql 安装教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档