如何来避免锁冲突

锁冲突检测

  1、对于事务锁,可以查询相关视图,查询发现锁冲突以及顶端阻塞者

  2、对于表锁,无法查询阻塞者,无法确定阻塞关系,因此对于表锁,很难定位故障

锁相关的视图

  innodb_locksinnodb_lock_waits

锁相关的参数

  行锁超时参数:innodb_lock_wait_timeout

  表锁超时参数:lock_wait_timeout

  innodb有一个不好的地方,通过性能视图只能查看事务锁以及锁定关系,对于表锁不能确定锁定关系,因此对表锁不能进行阻塞者的查找和处理,对于行锁来说,可以查找到阻塞者,然后找到阻塞者对应的线程IDkill掉对应的线程就可以释放锁,注意innodb主要通过三个视图来处理锁定关系,innodb_locksinnodb_trxinnodb_lock_waits三个视图来联合查询锁定关系

 

避免

  1、通过使用innodb table,避免使用MyISAM table

  2、监控行锁冲突(事务锁),为应用人员提供行锁冲突的信息(锁冲突对应的SQL语句、锁冲突对应的事务ID,然后通过binlog来查询事务对应的SQL语句),通过修改应用逻辑降低行锁冲突

  3、业务高峰期避免DDL,对于DDL操作一定要做好测试,对于锁表时间进行准确评估

  4、降低行锁冲突的超时时间

  5、监控大事务和长事务,将对应的SQL信息提供给开发人员

  6、提高DML语句对应的执行性能,尽量走索引

posted @ 2019-08-05 09:30  Tech_Shrimp  阅读(473)  评论(0编辑  收藏  举报