我在应用程序中有一些奇怪的错误(或者是MySQL构建吗?)导致查询永远处于“锁定”状态,填满最大线程数。
我读过有关将wait_timeout变量设置为在一段时间后杀死“伪造”线程的内容。这工作正常,但我想记录被查询的查询以进一步检查/确保备份脚本不被杀死。
有可能这样做吗?
感谢。
答案 0 :(得分:0)
您可以使用slow log,但我不确定问题是否是他们永远无法完成的。值得一试。
此外,您可能会在遇到死线程时通过运行SHOW FULL PROCESSLIST
来查看正在发生的事情。它应该显示问题是什么以及查询是什么。
如果您可以在开发环境中模拟这一点,您还可以启用常规查询日志记录(记录每个语句),然后在崩溃后将日志拖尾。
答案 1 :(得分:0)
过去,我使用唯一注释(每种查询类型)标记了查询:
/* Query_12345 */ SELECT ... FROM ... WHERE ... LIMIT ...
后台流程会轮询SHOW FULL PROCESSLIST
并查找长度超过X
秒且标有Query_NNNNN
的任何查询。
最后,如果它们持续太久,它会杀死它们。这让服务器能够呼吸,同时我们想出如何优化80,000,000记录表,这会减慢速度。