mysql锁表的解决方法_记一次Mysql 数据库诡异锁表解决过程

这篇博客描述了一个线上业务中心遇到的MySQL锁问题,表现为某些中心的业务保存时偶尔卡住,但并非所有中心都受影响。经过检查,发现表的in_use计数高,但无锁定事务。问题在不同操作系统上表现不一致,重装为Linux系统后问题消失。作者推测问题可能与Windows操作系统有关。
摘要由CSDN通过智能技术生成

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%正常。

结论

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值