mysql中事务不提交_MySQL事务未提交导致整个表锁死
当一个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 | | | |#事务状态: (编辑:通辽站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |