mysql 查看阻塞_MySQL8.0怎么找出阻塞源头

阻塞,MySQL中非常让人头疼的问题,因为锁资源之间的兼容关系,当一个事务需要等待另一事务所持有的锁的时候,便产生了阻塞,当数据库中存在大量阻塞的时候,导致CPU使用率飙升,整个系统的响应速度变慢。不过MySQL提供了参数innodb_lock_wait_timeout来限制锁等待时间,该参数默认值为50s,我们可以设置innodb_lock_wait_timeout为5s或者3s,这样锁等待时间不会太长。但这是治标不治本的方法,根本解决办法还是要找到产生阻塞的源头,从业务逻辑上避免产生阻塞。

在mysql5.7中,可以通过以下SQL来找出产生阻塞的语句:

select

b.trx_mysql_thread_id , – 被阻塞的会话ID

b.trx_query , – 被阻塞的SQL

c.trx_mysql_thread_id , – 造成阻塞的会话ID

c.trx_query,d.lock_mode , – 造成阻塞的SQL

lock_type, – 锁类型

lock_table , – 阻塞的表

lock_index – 阻塞的索引

from

performance_schema.innodb_lock_waits a

inner join performance_schema.innodb_trx b on a.requesting_trx_id=b.trx_id

inner join performance_schema.innodb_trx c on a.blocking_trx_id =c.trx_id

inner join performance_schema.innodb_locks d on a.blocking_lock

你可能感兴趣的:(mysql,查看阻塞)