pt-archiver挂在最后剩下的行上

时间:2018-06-13 22:19:29

标签: mysql hang percona

我试图用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

3 个答案:

答案 0 :(得分:0)

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

$ pt-archiver --version
pt-archiver 3.0.9

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

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

答案 1 :(得分:0)

感谢@Vinicius。我发现了问题。

我正在使用--where语句,如下所示。

function _GetPlacesFromId(placeId) {
    return {
        "1": "Roma",
        "2": "Venezia",
        "3": "Bologna",
        "10": "Milano",
        "5": "Genova",
        "6": "Ancona",
        "7": "Modena",
        "8": "Bari",
        "9": "Napoli"
    }[placeId];
}

/* Your code initialization */
var spotcam = { places: [ {place: 1, polygone: 15}, {place: 2, polygone: 15}, {place: 3, polygone: 15}, {place: 4, polygone: 15}, {place: 5, polygone: 15}, {place: 6, polygone: 15}, {place: 7, polygone: 15}, {place: 8, polygone: 15}, {place: 9, polygone: 15} ]};

var result1 = spotcam.places.reduce((pre, post) => {
    var name = _GetPlacesFromId(post.place);
    return pre + (!name ? '' : (pre ? ' - ' : '') + name);
}, '');

var result2 = spotcam.places.reduce((pre, post) => {
    return pre + (pre ? ' - ' : '') + post.place;
}, '');

var result3 = spotcam.places.reduce((pre, post) => {
    var name = _GetPlacesFromId(post.place);
    return pre + (!name ? '' : (pre ? ' - ' : '') + post.place);
}, '');

console.log("Result 1:", result1);
console.log("Result 2:", result2);
console.log("Result 3:", result3);

当我使用“ created_at” pt归档时,它永远停留在上次交易中。然后,我决定在--where语句中使用table的主键“ id”,如下所示。

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

因此,使用“ id”的pt存档器可以完美地工作。

我不确定为什么它不能与时间戳一起使用,但是当使用“ id”时问题得以解决。

答案 2 :(得分:0)

我不确定是否容易确定要传递给id脚本的PK pt-archiver范围。

一个更合适的解决方案是按照此线程中的描述更新pt-archiver脚本:https://bugs.launchpad.net/percona-toolkit/+bug/1193474/comments/4