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