如果表被锁定,则忽略MySQL查询

时间:2014-10-16 09:57:36

标签: mysql myisam

我有一个每隔几分钟执行一次MySQL查询的cronjob,总结了MyISAM表中的大量行。但是,如果此表被锁定几分钟,那么这些摘要查询将堆积起来,这样即使表最终再次可用,它们也会长时间阻止它。

这些查询都不是必不可少的,所以我很高兴他们不时失败。因此,如果表被阻止超过一秒或两秒,这些查询就会失败,我更愿意这样做。

有没有办法向MySQL提交一个查询,如果等待表锁定的时间超过几秒钟会自动被杀死?我能以某种方式将查询标记为不重要吗?

3 个答案:

答案 0 :(得分:0)

您可以使用以下命令查看打开的表来检查表是否已锁定:

show open tables;

如果您看到表被锁定,则可以在创建之前取消查询。文档here

5.7看起来也会正确实现SELECT超时:http://mysqlserverteam.com/server-side-select-statement-timeouts/

答案 1 :(得分:0)

看一下pt-kill(Percona Toolkit)。您可以在cron查询中添加可识别的注释,以便在需要时帮助定位查询。值得使用--sentinel标志,以便安全地让pt-kill退出。

此外,如果您向cron作业添加锁定,则可以防止堆积。

答案 2 :(得分:0)

更好的方法是运行其中一个查询吗?这将阻止堆积的发生。制作某种semafore(甚至是文件类型标志)以查看是否有一些查询已经在等待,如果有,请不要启动另一个查询。

正如你所说,如果有些人没有运行,那就不好了,这可能更容易实现。