#查询当前数据库全部线程
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
![在这里插入图片描述](https://img-blog.csdnimg.cn/4b88b0e6ce84494c8bff2b4485649e2e.png)
根据 select * from information_schema.innodb_trx查看当前运行的事务
![在这里插入图片描述](https://img-blog.csdnimg.cn/6467c3d942bd41db83db86367bf3c03f.png)
-
然后发送update请求。
-
#查询当前运行的全部事务
select * from information_schema.innodb_trx
![在这里插入图片描述](https://img-blog.csdnimg.cn/6d60b59cb58a4c1e8975091ff2004f96.png)
发现新的事物47062229等待锁、执行的sql,等待47059258释放锁。
-
#查询锁情况
select * from information_schema.innodb_locks
![在这里插入图片描述](https://img-blog.csdnimg.cn/96943a2b2474404aa2eca50584f63a28.png)
-
#查询锁等待情况
select * from information_schema.innodb_lock_waits
![在这里插入图片描述](https://img-blog.csdnimg.cn/91d3ea32b8d5412db7c381f347131c9f.png)
这里可以看到新事物等待某事物释放锁。
-
如何解决?
#查询当前运行的全部事务
select * from information_schema.innodb_trx
kill trx_mysql_thread_id 就可以了。![在这里插入图片描述](https://img-blog.csdnimg.cn/7de95d56d2c8463abfc59b0fc77ce57c.png)