首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在我杀死我的客户之后,MySQL继续处理查询数小时

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

Database Administration用户
提问于 2011-02-13 07:57:43
回答 2查看 2.7K关注 0票数 6

嗨,我有一个MySQL数据库,它有1000万行和很多触发器。php客户端连接到mysql并每秒插入数百行。

当客户端运行了几个小时后,我终止了客户机,使用mytop,我看到事务仍然在锁定,甚至是新的事务。在它“赶上”之前,它会持续几个小时。

现在作为一个DBA,我如何查看这个“回溯日志”?它列出的变量是什么?什么my.cnf参数可以控制它?为什么会发生这种事?我以为

EN

回答 2

Database Administration用户

发布于 2011-02-15 00:23:46

这里有一个很随便的解释..。

MySQL的工作方式如下:

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

代码语言:javascript
复制
SELECT TIME,STATE,ID,HOST,DB,INFO 
FROM INFORMATION_SCHEMA.PROCESSLIST 
WHERE INFO IS NOT NULL 
ORDER BY TIME DESC LIMIT 3\G

这将给您三个运行时间最长的进程。只是增加限度来揭示更多。如果您真的想要结束这个违规的进程,请查看ID字段并终止该#。例如。

代码语言:javascript
复制
*************************** 1. row ***************************
 TIME: 0
STATE: executing
   ID: 4
 HOST: localhost
   DB: NULL
 INFO: SELECT TIME,STATE,ID,HOST,DB,INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO IS NOT NULL ORDER BY TIME DESC
1 row in set (0.03 sec)

mysql> KILL 4;

这不会简单地杀死所有与该ID发生的事情,但至少您将确信,它肯定设置为“释放项”或等效状态。

票数 6
EN

Database Administration用户

发布于 2011-02-13 11:12:36

您确定终止客户端会扼杀正在运行插入的PHP进程吗?如果它对每个调用使用一个“新”连接,并且依赖某种类型的连接池来提高效率,那么当您杀死当前正在使用的连接时,它可能只是洗牌到池中的下一个可用连接上。

票数 5
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/1193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档