在MySQL中记录被杀死的查询

时间:2009-07-11 01:01:16

标签: mysql

我在应用程序中有一些奇怪的错误(或者是MySQL构建吗?)导致查询永远处于“锁定”状态,填满最大线程数。

我读过有关将wait_timeout变量设置为在一段时间后杀死“伪造”线程的内容。这工作正常,但我想记录被查询的查询以进一步检查/确保备份脚本不被杀死。

有可能这样做吗?

感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用slow log,但我不确定问题是否是他们永远无法完成的。值得一试。

此外,您可能会在遇到死线程时通过运行SHOW FULL PROCESSLIST来查看正在发生的事情。它应该显示问题是什么以及查询是什么。

如果您可以在开发环境中模拟这一点,您还可以启用常规查询日志记录(记录每个语句),然后在崩溃后将日志拖尾。

答案 1 :(得分:0)

过去,我使用唯一注释(每种查询类型)标记了查询:

/* Query_12345 */ SELECT ... FROM ... WHERE ... LIMIT ...

后台流程会轮询SHOW FULL PROCESSLIST并查找长度超过X秒且标有Query_NNNNN的任何查询。

最后,如果它们持续太久,它会杀死它们。这让服务器能够呼吸,同时我们想出如何优化80,000,000记录表,这会减慢速度。