mysql某批量更新导致死锁

 #查询当前数据库全部线程
 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 #查看当前的数据库请求,然后再判断当前事务中锁的情况
  1. 当update报错的时候
    mysql Lock wait timeout exceeded; try restarting transaction
    在这里插入图片描述
    根据 select * from information_schema.innodb_trx查看当前运行的事务
    在这里插入图片描述

  2. 然后发送update请求。

  3. #查询当前运行的全部事务
    select * from information_schema.innodb_trx
    在这里插入图片描述
    发现新的事物47062229等待锁、执行的sql,等待47059258释放锁。

  4. #查询锁情况
    select * from information_schema.innodb_locks
    在这里插入图片描述

  5. #查询锁等待情况
    select * from information_schema.innodb_lock_waits
    mysql某批量更新导致死锁_第1张图片
    这里可以看到新事物等待某事物释放锁。

  6. 如何解决?
    #查询当前运行的全部事务
    select * from information_schema.innodb_trx
    kill trx_mysql_thread_id 就可以了。在这里插入图片描述

你可能感兴趣的:(mysql,mysql,数据库)