tidb-server 在大并发下重启的优化思路

这个是在80+%的时候扣的:
heap.profile4 (55.5 KB)

95%的时候:
heap.profile5 (54.3 KB)
后面实在无能为力了,重启了连不上了。
如果重启不是1秒搞定,应该是准的了。

麻烦了,我们分析下,多谢。

从 pprof 看内存只看到 grpc 收数据后分配,未见明显的持有内存点。

但根据 stack 和前面 sql 看可以考虑修改配置:

set @@global.tidb_projection_concurrency = 1;
set @@global.tidb_hashagg_final_concurrency = 1;
set @@global.tidb_hash_join_concurrency = 1;
set @@global.tidb_hashagg_partial_concurrency = 1;
set @@global.tidb_index_lookup_concurrency = 1;
set @@global.tidb_index_lookup_join_concurrency = 1;

减少并发算子并发度,同时设置一个较小的单条语句乘以并发单节点可以支撑的 memory quota (并留一定 buffer 因为当前 memory tracker 仍然有一些未 track 的内存分配在当前您使用的版本 https://github.com/pingcap/tidb/pull/17324)再次尝试。

另外建议修改让起报错而不是落盘

oom-use-tmp-storage: false
tikv-client.copr-cache.enable: false

最后如果还不是不行,且压测的是那条带 window function 的 sql 可以帮尝试下去掉 window function 排除验证

有一个已知的 window function 的内存 issue https://github.com/pingcap/tidb/issues/16104

1 个赞

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。