微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在我杀死我的客户端后,MySQL继续处理查询数小时

嗨,我有一个拥有1000万行且有很多触发器的MySQL数据库. PHP客户端连接到MysqL和INSERT每秒数百行.

当客户端运行了几个小时,我终止客户端时,使用mytop我看到交易仍在发生,甚至是新的交易.它会在“赶上”之前持续数小时.

现在作为DBA,我如何查看这个“返回日志”?它被列为什么变量? my.cnf参数会控制它吗?为什么会发生这种情况?我以为

解决方法:

这是一个非常随意的解释……

MysqL的工作原理如下:

您向它发送一个结果集大于其缓冲区的查询,因此它会在磁盘上创建一个临时表来保存数据.这是一个昂贵的过程,因为它通常是从相同的磁盘读取,交换和写入,除非有意地配置不同.尽管如此,表演坦克.所以现在你在想“我必须做点什么吧?”所以你杀了你的PHP进程.现在的问题是“您的查询过程是否被杀死,或者它正在运行还是现在正在释放空间?”要了解您的进程处于什么状态,您需要以root身份或具有PROCESS权限的用户身份运行:

SELECT TIME,STATE,ID,HOST,DB,INFO 
FROM @R_623_4045@ION_SCHEMA.PROCESSLIST 
WHERE INFO IS NOT NULL 
ORDER BY TIME DESC LIMIT 3\G

这将为您提供前三个运行时间最长的流程.只需增加限制即可显示更多内容.如果你真的想要结束有问题的过程,请查看ID字段,然后看KILL#.
例如.

*************************** 1. row ***************************
 TIME: 0
STATE: executing
   ID: 4
 HOST: localhost
   DB: NULL
 INFO: SELECT TIME,STATE,ID,HOST,DB,INFO FROM @R_623_4045@ION_SCHEMA.PROCESSLIST WHERE INFO IS NOT NULL ORDER BY TIME DESC
1 row in set (0.03 sec)

MysqL> KILL 4;

这不会简单地杀死使用该ID发生的所有事情,但至少你可以放心,它肯定会被设置为“释放项目”或等同物的状态.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐