前言
相信不管是做DBA还是开发,大家其实都不想遇到锁这玩意儿,因为锁这东西是一把
双刃剑,用的好了的话可以保护对资源的并发访问竞争,但是用不好的话,很容易引起
线上问题,比如死锁,锁等待,业务等待,业务不可用,数据库性能急剧下降。
MySQL锁相关表
相信大家都知道,MySQL锁的种类有很多种,读锁写锁元数据锁等等。
进入正题我们如何排查锁,一般通过以下几张表:
5.7版本 Information_schema.innodb_locks表会显示当前的等待的锁 Information_schema.innodb_trx 表可以查询到当前未提交的事务
8.0版本,废弃了之前的innodb_locks表 加入了下面几张表 在 performance_schema下面引入几张表: data_lock_waits. 显示当前等待的锁 data_locks。 显示当前所有的锁 metadata_locks 显示当前的元数据锁的细节
MySQL锁监控相关
Innodb_row_lock_current_waits
: 当前等待锁的数量
Innodb_row_lock_time
:系统启动到现在锁等待总耗时
Innodb_row_lock_time_avg
:系统启动到现在锁等待的平均时间
Innodb_row_lock_time_max
:系统启动到现在锁等待的最长时间
Innodb_row_lock_waits
:系统启动到现在锁等待的总次数