项目坑有千千万,我们静下心来还是可以找到解决办法的
最近接了一个由供应商留下来的项目,正是周末休息时间突然一个电话说功能用不了,翻看日志发现是业务功能的表被锁了,我就奇了怪了,天天没事,突然周末来使儿。一番了解才发现那个锁表情况是天天都有的,但是一直没找到原因,所以DBA运维同事天天充当定时删除机器,每天早上清除锁表进程,丢失的数据也手动补录,厉害了,这就是供应商做的项目吗?烂到这个层度(吐槽一番)
回到正题,我们来聊一聊我的解决步骤
1、首先得了解数据库的事务机制
一个完整的事务会包含
SET autocommit=0事务开启
commit 提交事务 / rollback回滚事务
SET autocommit=1 关闭事务
2、查看日志分析事务是否完整,不完整的地方就可能是锁表语句出现的地方
3、分析代码,定位到出问题的代码进行分析
一般会有这几种问题导致死锁:
1)在同一个事务里面,同时对表中得数据进行增删改查
2)请求操作未提交的长事务里面的表导致表死锁
这两种情况都得修改代码,终止是将长事务拆分成短事务
项目上遇到的正式案例以及解决思路