服务器时间更新时超过MySQL锁定超时

时间:2015-07-15 21:03:50

标签: mysql

我们有一台MySQL 5.6 DB服务器,为10个客户提供服务。客户端轮询数据库服务器以查找要处理的记录。我们遇到了间歇性问题,所有客户端都会突然生成"超过锁定等待超时;尝试重启交易"错误,所有这些都在同一时间。在对其中一个事件进行故障排除期间,我们注意到在服务器(Windows Server 2008R2)上,客户端生成错误时服务器时间已更改。我们下次记下了。

今天下次发生了。 10个客户端中有9个产生了错误,当然,当我们检查服务器上的事件查看器时,服务器时间在生成错误的确切时间向前改变了1秒。

有人可以解释一下:

  1. 为什么会这样?
  2. 推荐一种预防方法?
  3. 我们已经在处理死锁错误了,实际上并不清楚程序在这个错误的来源。客户端不会同时轮询服务器,而是以大约10秒的间隔随机伪装,这让我们感到困惑,因为很多人会在同一时刻产生错误。

    谢谢, 巴勃罗

1 个答案:

答案 0 :(得分:0)

可能正在发生的事情是某些线程正在锁定某个记录/表(可能是计划任务是为了备份正在生成锁的DB),并且您的线程正在超时。正如我在评论中所说,请查看innodb状态日志以获取更多详细信息。

避免这种情况的一种方法是使用InnoDB存储引擎,然后微调您的事务隔离级别。

执行SELECT @@GLOBAL.tx_isolation, @@tx_isolation;

检查事务隔离级别

如果你看到其中任何一个为REPEATABLE READ,它是InnoDB的默认设置,则使用

将其设置为READ COMMITTED

SET tx_isolation = 'READ-COMMITTED';SET GLOBAL tx_isolation = 'READ-COMMITTED';