关于查询MySQL事务阻塞信息,你还可以这样玩?

本文介绍了如何在MySQL中查找和分析事务阻塞信息,提供了利用`information_schema.innodb_locks`、`information_schema.innodb_lock_waits`和`performance_schema`等表进行诊断的方法。通过示例展示了如何定位阻塞事务,减少误操作风险。
摘要由CSDN通过智能技术生成

关注我们获得更多内容

640?wx_fmt=png


作者 | 陈龙,云和恩墨西区工程师,一线服务过金融等行业,精通 oracle 性能优化,故障诊断,特殊恢复领域 。


前言


众所周知 innodb 是支持事务型的存储引擎,在日常运维中大部分运维人员都会遇到关于 DDL 锁阻塞的情况,对于解决这类问题,有常规快速的解决方式。


那今天主要分享一个,如何去查找有关阻止事务的更多信息。


 

测试过程


测试环境:

mysql> USE test

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

 

Database changed

 

新建测试表:

mysql> CREATE TABLE tx_albert (

    ->     id     INT PRIMARY KEY,

    ->     name   VARCHAR(20),

    ->     age    INT,

    ->     sex    CHAR(2),

    ->     city   VARCHAR(20),

    ->     job    VARCHAR(10)

    -> );

Query OK, 0 rows affected (0.24 sec)

640?wx_fmt=png


插入数据:

mysql> INSERT INTO tx_albert (id,name,age,sex,city,job) VALUES (1,'albert',18,'M','GuiYang','DBA');

Query OK, 1 row affected (0.01 sec)

 

mysql> INSERT INTO tx_albert (id,name,age,sex,city,job) VALUES (2,'john',24,'F','GuiYang','DEV');

Query OK, 1 row affected (0.00 sec)

640?wx_fmt=png

 

会话1:

mysql> start transaction;

Query OK, 0 rows affected (0.00 sec)

 

mysql> UPDATE tx_albert SET name = 'Taeyeon' WHERE id = 2;

Query OK, 1 row affected (0.13 sec)

Rows matched: 1  Changed: 1  Warnings: 0

 

会话2:

mysql> UPDATE tx_albert SET name = 'Jessica' WHERE id = 2;

会话等待....

 

不同方法解读
  • 对于一般常规的做法,可以直接利用 show processlist

640?wx_fmt=png


如果发生了 DDL 锁阻塞,特别是表上有事务未提交的会话,利用show processlist,不便于具体定位。


当然,可以看 Command,找出 locked 的 id,然后 kill,但是这样太过于暴力,也容易会 kill 错。


备注:command列:显示当前连接的执行的命令,一般就是休眠(sleep),查询(query),连接(connect)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值