超难的SQL Server timed out 和 互锁冲突 的问题,两三年才找到原因。

有个服务器,既有数据库服务器,又有网络服务器,还有很多定时运行的程序。网络服务器闲时一个星期出现两三次SQL Server timed out 问题,忙时每天出现四五次SQL Server timed out问题,有时还经常出现互锁冲突。小老板不高兴,是程序员出身,但是是那种水平一般般的那种,总觉得是哪个SQL 语句性能太差,把SQL server搞垮了。搞了两年的SQL语句优化问题,还是没有解决,真的是很烦,我老觉得不应该是SQL语句性能的问题,因为找了这么多年,烂SQL应该都没了。应该是web 服务器或者其他原因导致了机器过载,然后导致数据库服务器性能下降,导致SQL Server timed out问题。但是又找不到直接导致的原因,又不想天天去优化那些不该优化的SQL。就这事经常和小老板经常有冲突。

老板把服务器内存加大到32G,问题还是出现。

最近发现有个定时运行的程序产生的日志没有出现,这个程序有好几个copy(每个copy有不同的运行参数)每分钟运行一次,不管成功不成功都要生成一些日志。这非常蹊跷,为什么没有日志呢?

怀疑程序可能根本没有运行,所以日志没有出现。

这个程序由windows 2008服务器的scheduler每分钟定时运行,查看scheduler的日志,发现日志无法查看,新产生的日志马上就消失,原因是太多的日志产生了所以一秒钟前的日志因为后一秒产生的日志太多而被删掉了。再看scheduler的设置,发现是“失败立即重新运行”和“如果有同样的程序运行就放弃”。

原因出来了,由于网络服务器很忙时,定时运行的程序由于要处理的东西非常多运行时间比较长,要20分钟才能完成,结果因为同样程序在运行即使轮到它也不能运行。但是失败了马上又重新运行,这样一个周期在一秒钟内估计反复几千次,把CPU资源耗尽了,所以导致无法启动定时程序,所以也没有日志产生。同样因为CPU资源耗尽,导致数据库服务器反应很慢,导致timed out和互锁冲突。

把scheduler设置改了改,如果失败每隔一分钟尝试一次但是最多运行3次。

SQL Server timed out和互锁冲突再也没有出现过。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章