【问题标题】:pt-archiver hangs on last remaining rowspt-archiver 挂在最后剩余的行上
【发布时间】:2018-06-13 22:19:28
【问题描述】:

我正在尝试使用 pt-archiver 清除 mysql 表并遇到一个奇怪的问题。

假设以下查询返回 60789 行。

SELECT COUNT(*) FROM abc WHERE created_at BETWEEN '2008-09-01 00:00:00' AND '2008-09-05 23:59:59';

我正在使用以下 pt-archiver 语法来清除行。

/usr/local/bin/pt-archiver --source h=localhost,u=root,p=abcdef,D=cbs_production,t=abc \
--where "created_at >= '2008-09-01 00:00:00' AND created_at <= '2008-09-05 23:59:59'" \
--purge --sleep-coef 1.0 --txn-size 1000 --progress=1000 --statistics

所以它开始在每次迭代中删除第 1000 行,但当它完成 61000 时,它会永远挂起,并且不会删除剩余的 789 行。

我尝试了以下版本的 Percona Toolkit。 pt-archiver 3.0.9 和 pt-archiver 3.0.10

我也查阅了以下帖子,但没有任何效果。

https://bugs.launchpad.net/percona-toolkit/+bug/1096274

https://bugs.launchpad.net/percona-toolkit/+bug/1583498

https://bugs.launchpad.net/percona-toolkit/+bug/1193474

【问题讨论】:

  • 不太确定您在 SO 上寻求什么样的帮助,因为这是一个面向 sw 开发人员的问答网站。你没有编程问题,你需要弄清楚为什么一个工具没有做它应该做的事情。 DBA SE 站点或 percona 自己的支持论坛会是更好的问题候选者。

标签: mysql freeze percona


【解决方案1】:

我无法重现您所面临的问题:

$ pt-archiver --version
pt-archiver 3.0.9

是否可以发送您的 MySQL 版本和表结构?

SHOW CREATE TABLE <table_name>\G
SELECT @@version;

【讨论】:

    【解决方案2】:

    感谢@Vinicius。我想通了。

    我使用的 --where 语句如下。

    --where "created_at >= '2008-09-01 00:00:00' AND created_at <= '2008-09-05 23:59:59'"
    

    当我使用“created_at”时,pt-archiver 永远卡在最后一个事务上。然后我决定在 --where 语句中使用表的主键“id”,如下所示。

    --where "id>=18689121 AND id<=19998441"
    

    因此,使用“id”pt-archiver 可以完美地工作。

    我不确定为什么它不适用于时间戳,但使用“id”时问题已解决。

    【讨论】:

      【解决方案3】:

      我不确定人们是否能轻松找出要传递给 pt-archiver 脚本的 PK id 范围。

      更合适的解决方案是更新pt-archiver 脚本,如该线程所述:https://bugs.launchpad.net/percona-toolkit/+bug/1193474/comments/4

      【讨论】:

        猜你喜欢
        • 2018-03-09
        • 2019-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-22
        • 1970-01-01
        相关资源
        最近更新 更多