zhanggame1
(Ti D Ber G I13ecx U)
1
【 TiDB 使用环境】测试
【 TiDB 版本】7.1
【遇到的问题:问题现象及影响】
测试tidb gc回收情况,数据准备约9000万表的表
测试方式,循环删除,每次删除5000条,持续执行
删除语句:
delete from history_uint limit 5000;
测试结论:
越删除越慢,开始200毫秒左右一次,后面2秒以上
遇到问题:
删除半小时后,监控看后面gc任务就看不到了,cpu和io负载也大幅降低,不知道哪里有问题
补充1小时的gc,看起来后面没再进行gc
WalterWj
(王军 - PingCAP)
2
因为有 mvcc ,这个 SQL 越来越慢应该预期的。可以开 cop cache 来降低历史版本影响。
而且这个测试感觉没啥意义 。情况表一般用 truncate。如果 delete 新版本推荐用 batch dml
zhanggame1
(Ti D Ber G I13ecx U)
3
batch dml也是循环delete,并没有什么不同
zhanggame1
(Ti D Ber G I13ecx U)
4
越来越慢在预期内,并不是问题,主要问题有2个
一个问题是后面看起来gc似乎不执行了
第二个,为什么随着delete进行,region数量不停在涨
人如其名
(人如其名)
5
建议看下batch dml的原理,机制不一样。batch dml通过主键删除,跳过打gc标记的记录,删除性能稳定不会越来越慢。
longzhuquan
(Ti D Ber G Wu Er Tph)
6
因为没有GC,随着delete进行,数据是越来越多的(底层的delete不是删除数据,而是将数据标记为垃圾数据,在GC时才回清理),所以region数量不停在涨。GC卡住的原因,看一下GC时间设置,以及是否有其他的事物堵塞了GC。
SELECT * FROM mysql.tidb;
贴一下结果
你这显示gc已经推进到最新时间了,如果系统负载高确实有可能gc推进不动,这里的gc时间会显示延迟的
h5n1
(H5n1)
12
1、 delete也是insert,删除数据是写入一条delete标记的新记录,所以delete会增加实际数据大小
2、 gc in compaction filter ,再compaction 时处理GC。
1 个赞
redgame
(Ti D Ber Pa Amoi Ul)
13
考虑在删除操作中以更大的批次进行删除,而不是每次只删除5000条数据。减少删除操作的次数可能会减少 GC 的负担,并提高删除操作的整体性能
zhanggame1
(Ti D Ber G I13ecx U)
14
删除官方文档最佳实践例子是5000,你认为多少合适
system
(system)
关闭
15
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。