mysql查询死锁语句是什么

嘿... MySQL 的... 锁定表... 很烦人... 我以前遇到过这个...
你想检查... 一个表是否被锁定... 在 MySQL 5 .7 版本中... 你可以使用这个语句... select from info_schema.innodb_locks; ...这样你就可以看到...当前锁定了什么...哪个表...哪个索引...哪个事务ID...但是...MySQL8 .0不支持这个...8 .0需要不同的方法...你必须查看许多其他视图...例如innodb_trx和innodb_lock_waits...结合并分析...
然后...你想知道...哪个事务等待被锁定...SELECT info_schema.innodb_lock_waits;...这个语句...可以告诉你...哪个事务被锁定...哪个事务正在等待...这个很重要...它可以帮助你找到死锁...
另外...你想看看...哪个事务还没有提交...SELECT FROM information_schema.innodb_trx;...它可以列出所有不完整的事务是...哪个事务ID...状态是什么...什么时候开始的...哪个锁还被持有...如果状态是lockwait...你要特别注意...可能是死锁...
再...你想看看...所有线程都在做什么...select from information_schema.processlist;...它可以看到所有连接...正在运行什么SQL...运行了多长时间...你在等什么...状态字段...比如表等待元数据锁...可能会帮助你看到...问题出在哪里...
哦,对了...死锁是怎么形成的...是多个事务...抢资源...顺序不一样...例如,A锁表1 ...想要表2 ...B锁定表 2 ...想要表 1 ...并且它被卡住...InnoDB 会自动回滚一个...但是...如果死锁太多...系统会变慢...
如何防止这种情况...可以让所有事务...按照一定的顺序访问表...不要搞乱...还有...不要让事务花费太多时间...锁定时间要短...这个也很有用...好好利用索引...可以避免全表扫描。
..那就不需要表级锁了...行级锁没有潜在的冲突...还有...你把MySQL版本升级到8 .0以上...在那个版本...Performance_schema有data_locks和data_lock_weights...可以给你更多的锁信息...
嗯...就是这样...很具体...比如...2 02 2 年...我在某个城市...某个系统...使用了这些语句...数量是...大概每个几百个问题天……钱……大概是因为僵局……多少钱……记不太清了……不过挺麻烦的……

MySQL 事务死锁问题排查 | 京东云技术团队

行阻塞的互斥会导致死锁。
死锁意味着等死。

上周我遇到了一个,摊位日志爆炸了。

先看日志,看看哪个表、哪些SQL被锁了。
你能检查一下吗?
RR隔离太严格,导致写入时挂起。
尝试将其更改为 RC。

将业务分成更小的部分。
不要让它太大。
小事务的死锁较少。

索引优化是关键。
全表锁的不正确使用。
检查索引是否使用正确。

分布式阻塞可行吗?看业务很重要。
但你必须考虑性能。

监控死锁的频率。
更多的僵局表明出了问题。

你自己看看。
这是第一个。