如何发送回滚到运行时间过长的cron jobbed MySql查询

时间:2012-01-04 15:25:57

标签: mysql triggers

由于行锁定和触发器中长时间运行的查询引起的性能问题,我选择每五分钟从一个cron作业运行查询作为存储过程。

我的问题是我需要防止查询时间超过5分钟并与下一个存储过程的计划运行冲突的情况。由于我在事务中运行此查询,理想情况下,我只需在五分钟后执行存储过程中的某处回滚。这可能吗?

感谢。

2 个答案:

答案 0 :(得分:1)

'暴力'方法是拥有一个带有“工作”的表格。每行都有一个开始时间和结束时间。查找没有结束时间的最近开始时间。如果您的下一份工作想要开始并且没有列出结束时间,则终止上一份工作。

你甚至可以将进程ID放在那里。

答案 1 :(得分:0)

我最后只是注意了程序开始时的纪元时间,然后在我处理的每个记录之后,我做了提交并计算了经过的时间。如果它高于预设的超时值I BREAK并结束程序。

唯一可能的失败是存储过程的while循环中的逻辑(插入)花费的时间太长,但这不太可能。我宣布了一些退出处理程序以减轻这种可能性(他们做ROLLBACK)。