加入收藏 | 设为首页 | 会员中心 | 我要投稿 东营站长网 (https://www.0546zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

mysql中事务不提交_MySQL事务未提交导致整个表锁死

发布时间:2023-01-13 15:05:50 所属栏目:MsSql教程 来源:网络
导读: 问题及说明:
当一个SQL事务执行完了,但未COMMITmssql 事务,后面的SQL想要执行就是被锁,超时结束;报错信息如下:
mysql> ERROR 1205 (HY000): Lock wait timeout exceeded; try restar

问题及说明:

当一个SQL事务执行完了,但未COMMITmssql 事务,后面的SQL想要执行就是被锁,超时结束;报错信息如下:

mysql> ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

处理步骤:

该问题发生环境为MySQL5.6,在MySQL 5.5版本后,information_schema 库中增加了三个关于锁的表,分别如下:

innodb_trx:当前运行的所有事务

innodb_locks:当前出现的锁

innodb_lock_waits:锁等待的对应关系

该问题可以直接从这个几张表入手,找到了一直没有提交的只读事务,然后kill thread id

,最后确认只读事物是否被干掉了就OK了。解决步骤如下:

mysql> select * from information_schema.innodb_trx;

mysql> SHOW FULL PROCESSLIST;

mysql> kill 'thread id';

mysql> select * from information_schema.innodb_trx;

PS:如需要查看定位是哪条语句,可以在MySQL的binlog日志中查看根据id和时间定位查找语句。

MySQL事务知识点延伸:

1. 三个库的字段含义

mysql > desc information_schema.innodb_locks;

+-------------+---------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------------+---------------------+------+-----+---------+-------+

| lock_id | varchar(81) | NO | | | |#锁ID

| lock_trx_id | varchar(18) | NO | | | |#拥有锁的事务ID

| lock_mode | varchar(32) | NO | | | |#锁模式

| lock_type | varchar(32) | NO | | | |#锁类型

| lock_table | varchar(1024) | NO | | | |#被锁的表

| lock_index | varchar(1024) | YES | | NULL | |#被锁的索引

| lock_space | bigint(21) unsigned | YES | | NULL | |#被锁的表空间号

| lock_page | bigint(21) unsigned | YES | | NULL | |#被锁的页号

| lock_rec | bigint(21) unsigned | YES | | NULL | |#被锁的记录号

| lock_data | varchar(8192) | YES | | NULL | |#被锁的数据

+-------------+---------------------+------+-----+---------+-------+

10 rows in set (0.00 sec)

mysql> desc information_schema.innodb_lock_waits;

+-------------------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------------------+-------------+------+-----+---------+-------+

| requesting_trx_id | varchar(18) | NO | | | |#请求锁的事务ID

| requested_lock_id | varchar(81) | NO | | | |#请求锁的锁ID

| blocking_trx_id | varchar(18) | NO | | | |#当前拥有锁的事务ID

| blocking_lock_id | varchar(81) | NO | | | |#当前拥有锁的锁ID

+-------------------+-------------+------+-----+---------+-------+

4 rows in set (0.00 sec)

mysql> desc information_schema.innodb_trx;

+----------------------------+---------------------+------+-----+---------------------+-------+

| Field | Type | Null | Key | Default | Extra |

+----------------------------+---------------------+------+-----+---------------------+-------+

| trx_id | varchar(18) | NO | | | |#事务ID

| trx_state | varchar(13) | NO | | | |#事务状态:

(编辑:东营站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!