记一次Mysql 数据库诡异锁表解决过程

Mysql锁表现象

  • 1、目前线下业务中心N个,每一个线下业务中心,拥有独立的内网服务器,用于线下业务,部分中心务偶尔性的出现业保存时卡住无法进行的情况一旦卡住则无法使用,时间不确定、周期不确定,部分中心周期短的时候1周一次,时间长的可能一两个月一次,而实际业务量基本保持稳定增长,没有大变化 。
  • 2、同样的代码仅在部分中心出现该问题。
  • 3、表引擎为innodb
  • 4、 mysql版本为5.6.x
  • 5、 服务器基本为windows server 2008R2、windows server 2012。

原因分析查找

1、show open tables where in_use >=1;  执行时发现某一张表 in_use达到100次之多,直接影响业务的正常进行。(https://dev.mysql.com/doc/refman/5.6/en/show-open-tables.html)

2.、查询当前锁定的事务为空、等待锁的事务也为空,没有锁的事务??但表N多in_use状态 

3、每次锁的表不固定,随机锁表(难道是系统整体事务有问题?也不可能,有的中心长期运行无任务问题,同样的代码)。

解决过程

事情比较诡异,当然首先想到的是事务处理有问题,而经过确认研究,事务写法、配置均正确。

  • 1、暂时没解决之前,只能先临时重启mysql处理,另行查找原因。
  • 2、查找源代码,发现锁表的很多是非常简单的业务比如整个系统中只涉及到一个insert 语句而已,无复杂业务,确认源代码无问题。
  • mysql> show variables like ‘innodb_autoinc_lock_mode’;
    +————————–+——-+
    | Variable_name | Value |
    +————————–+——-+
    | innodb_autoinc_lock_mode | 1 |
    +————————–+——-+

发现自增表锁模式为:连续模式,每次也是单记录写入。

  • 查找mysql错误日志,发现没有死锁日志。

最终解决办法

怀疑跟操作系统有关,不同批次的服务器供应商安装的操作系统有异,将服务器重装为Linux之后,观察运行情况,重装之后至今(几个月了)但凡装过Linux系统的业务中心均再未出现该现象。 update 2020年4月30日  目前已经运行近4个月100%正常。

结论

但凡不是自己安装的系统,或者不确定是正版系统的情况下系统出现莫名其妙的问题, 初步排查程序没有问题时,可以优先考虑操作系统的问题。

Leave a Reply


正在读取数据……