9

我在 MySQL 中有一个长期运行的进程。它已经运行了一周。还有另一个连接到复制主机,但我已经停止了从属处理,所以实际上没有其他事情发生。

我怎么知道这个过程是否仍然有效?我知道这需要很长时间,这就是为什么我把它放在自己的数据库实例上,但这比我预期的要长。显然,如果它还在工作,我不想杀死它。如果它是僵尸,那么我不知道如何完成它应该做的工作。

它处于“发送数据”状态。该表是一个 InnoDB 表,但没有查询使用的任何 FK 引用。自查询开始以来,InnoDB 状态显示没有错误或锁定。

任何想法表示赞赏。

4

4 回答 4

8

试试“SHOW PROCESSLIST”看看什么是活跃的。

当然,如果你杀死它,它可能想要花同样多的时间来回滚它。

于 2009-04-06T23:00:51.293 回答
3

您需要杀死它并提出更好的索引。

我为一个男人做了一份工作。有一个大约有 3500 万行的表。他的批处理过程,和你一样,已经运行了一周,看不到尽头。我添加了一些索引,对他批处理的顺序和方法进行了一些更改,整个过程缩短到两个半小时左右。在较慢的机器上。

于 2009-04-06T22:37:58.087 回答
0

鉴于你所说的,它没有被卡住。但是,绝对不能保证它会在任何类似合理的时间内完成。添加索引几乎肯定会有所帮助,并且根据查询的类型将其重构为使用临时表的一系列查询可能会给您带来巨大的性能提升。我不建议等待它完成。

于 2009-11-21T18:55:17.237 回答
0

为了在这种大小的数据库上获得更好的性能,您可能需要查看基于文档的数据库,例如 mongoDB。存储数据库需要更多的硬盘空间,但根据您当前的模式,您可能会获得更好的性能。

于 2010-01-29T18:18:53.687 回答