锁冲突检测
1、对于事务锁,可以查询相关视图,查询发现锁冲突以及顶端阻塞者
2、对于表锁,无法查询阻塞者,无法确定阻塞关系,因此对于表锁,很难定位故障
锁相关的视图
innodb_locks、innodb_lock_waits
锁相关的参数
行锁超时参数:innodb_lock_wait_timeout
表锁超时参数:lock_wait_timeout
innodb有一个不好的地方,通过性能视图只能查看事务锁以及锁定关系,对于表锁不能确定锁定关系,因此对表锁不能进行阻塞者的查找和处理,对于行锁来说,可以查找到阻塞者,然后找到阻塞者对应的线程ID,kill掉对应的线程就可以释放锁,注意innodb主要通过三个视图来处理锁定关系,innodb_locks、innodb_trx、innodb_lock_waits三个视图来联合查询锁定关系
避免
1、通过使用innodb table,避免使用MyISAM table
2、监控行锁冲突(事务锁),为应用人员提供行锁冲突的信息(锁冲突对应的SQL语句、锁冲突对应的事务ID,然后通过binlog来查询事务对应的SQL语句),通过修改应用逻辑降低行锁冲突
3、业务高峰期避免DDL,对于DDL操作一定要做好测试,对于锁表时间进行准确评估
4、降低行锁冲突的超时时间
5、监控大事务和长事务,将对应的SQL信息提供给开发人员
6、提高DML语句对应的执行性能,尽量走索引