#查询当前数据库全部线程
show full processlist
#查询当前运行的全部事务
select * from information_schema.innodb_trx
#查询锁情况
select * from information_schema.innodb_locks
#查询锁等待情况
select * from information_schema.innodb_lock_waits
#查看mysql设置等待锁时长
show variables like "innodb_lock_wait_timeout%" #默认50s
show engine innodb status #查看当前的数据库请求,然后再判断当前事务中锁的情况
-
当update报错的时候
mysql Lock wait timeout exceeded; try restarting transaction
根据 select * from information_schema.innodb_trx查看当前运行的事务
-
然后发送update请求。
-
#查询当前运行的全部事务
select * from information_schema.innodb_trx
发现新的事物47062229等待锁、执行的sql,等待47059258释放锁。 -
#查询锁情况
select * from information_schema.innodb_locks
-
#查询锁等待情况
select * from information_schema.innodb_lock_waits
这里可以看到新事物等待某事物释放锁。 -
如何解决?
#查询当前运行的全部事务
select * from information_schema.innodb_trx
kill trx_mysql_thread_id 就可以了。