【发布时间】:2017-11-09 14:02:59
【问题描述】:
在pt-archiver中如何表达?
DELETE * FROM Table1 JOIN ON Table1.id=Table2.id WHERE Table2.id>=1;
我找不到在 pt-archiver 字符串中加入 Table1 和 Table2 的任何可能性。我试过了,但是 Table2 的连接字符串丢失了:
pt-archiver --source h=127.0.0.1,D=db,t=Table1 --purge --where 'Table2.id >= 1'
请给我一些你的想法。
【问题讨论】:
-
pt-archiver 似乎不支持多表案例。如果您想优化您的查询,我认为将大 DELETE 拆分为较小的。比如
Table2.id>=20000000...然后Table2.id>=1000000.. -
是的,我知道它可以工作,但是如果我这样做,应该手动控制服务器以解决过载问题并在紧急情况下进行调整。我在 Percona 主页上找到了一些解决方案,如下:
pt-archiver --source h=host,D=db,t=child --purge \ --where 'EXISTS(SELECT * FROM parent WHERE col=child.col AND child.col>=1)'。这可能有效,但我不确定父表的声明方式和位置。有什么想法吗? -
大概是这样的??
pt-archiver --source h=localhost,D=db,t=Table1 --purge \ --where 'EXISTS(SELECT * FROM Table2 WHERE id=Table1.id AND Table2.id>=1)' -
试试
--dry-run。这个选项告诉你 cmd 会做什么