MySQL事件在一段时间后停止工作

时间:2012-07-30 21:44:04

标签: mysql events

我有一些游戏,其中用户健康状况和其他属性使用MySQL事件几分钟更新。我遇到了一个问题,最终事件不再运行,事件中的SQL没有被执行。

我不确定如何修复它,所以我尝试重启MySQL并修复了一段时间。我设置MySQL在cron每晚重启,但这不是一个很好的解决方案。有时MySQL无法重启并挂起。

编辑:我的数据库中使用这些事件的所有表都是InnoDB。

2 个答案:

答案 0 :(得分:2)

可能是您有没有完成并持有许多锁的事件。最终,额外的工作将会#34;堆积起来"每个人都试图获得锁,但似乎没有工作。如果您使用MyISAM表,因为它们具有表级别而不是行级锁定,则尤其如此。

考虑配置pt-stalk(Percona Toolkit的一部分)来捕获' show processlist'的常规快照。和其他重要细节。然后你可以追踪事情和#34;停止工作"并在问题开始时回答问题。

防止"堆积"使用GET_LOCK函数:

SELECT GET_LOCK('THIS_IS_A_NAMED_LOCK', 0) INTO @got_lock;
IF @got_lock = 1 THEN
  select 'do something here';
  SELECT RELEASE_LOCK('THIS_IS_A_NAMED_LOCK') INTO @discard;
END IF;

如果您使用的是InnoDB,请确保在事件中发出START TRANSACTION和COMMIT命令,以确保您不会创建长时间运行的事务。

答案 1 :(得分:0)

我最近因为这个问题离线了我的iOS游戏。我无法弄清楚Justin Swanhart如何实现答案。如果有人有兴趣,我可以让我的php / mysql代码可用,看看你是否可以解决这个问题。请告诉我。 andy.triboletti@gmail.com