我在MySQL中有一个长时间运行的进程。它已经运行了一个星期。复制主机还有另一个连接,但是我已经停止了从属处理,所以实际上没有其他任何连接。
如何确定此过程是否仍然有效?我知道这需要很长时间,这就是为什么我把它放在自己的数据库实例上,但这比我预期的要长。显然,如果它仍在工作,我不想杀死它。如果它被僵尸,那么我不知道如何完成它应该做的工作。
它处于“发送数据”状态。该表是InnoDB,但没有查询使用的任何FK引用。自查询开始以来,InnoDB状态显示没有错误或锁定。
任何想法都表示赞赏。
答案 0 :(得分:5)
尝试“SHOW PROCESSLIST”以查看活动的内容。
当然,如果你杀了它,它可能需要花费同样多的时间回滚它。
答案 1 :(得分:3)
你需要杀死它并提出更好的指数。
我为一个男人做了一份工作。有一个约3500万行的表。他的批处理程序和你的一样,已经运行一周,看不到尽头。我添加了一些索引,对其批处理过程的顺序和方法进行了一些更改,并将整个过程缩小到大约两个半小时。在较慢的机器上。
答案 2 :(得分:0)
鉴于你所说的,它并没有被卡住。但是,绝对不能保证它会在合理的时间内完成任何事情。添加标记几乎肯定会有所帮助,并且根据查询的类型将其重构为一系列使用临时表的查询可能会给您带来巨大的性能提升。我不建议等待它完成。
答案 3 :(得分:0)
为了在大小的数据库上获得更好的性能,您可能需要查看基于文档的数据库,例如mongoDB。存储数据库需要更多的硬盘空间,但根据您当前的架构,您可以获得更好的性能。