集群无负载时 tidb 进程吃满系统内存后挂掉

【 TiDB 使用环境】生产环境
【 TiDB 版本】7.3.0
【复现路径】
给一张表插入约40万条记录之后,所有的 SQL 都已经执行完毕,数据库集群处于没有请求的空闲状态。
【遇到的问题:问题现象及影响】
观察到集群中一台服务器当中,tidb 进程的 CPU 和内容使用异常的高,这个现象持续到 tidb 进程吃满整个系统内存,最后自己挂掉重启。
【资源配置】
集群一共有5台机器,因为是生产环境,下面的内容中隐去了IP地址等无关信息。

Cluster type:       tidb
Cluster name:       0000
Cluster version:    v7.3.0
Deploy user:        tidb
SSH type:           builtin
Dashboard URL:      http://00.00.00.001:2379/dashboard
Grafana URL:        http://00.00.00.001:3000
ID                  Role          Host          Ports                            OS/Arch       Status   Data Dir                      Deploy Dir
--                  ----          ----          -----                            -------       ------   --------                      ----------
00.00.00.001:9093   alertmanager  00.00.00.001  9093/9094                        linux/x86_64  Up       /tidb-data/alertmanager-9093  /tidb-deploy/alertmanager-9093
00.00.00.001:3000   grafana       00.00.00.001  3000                             linux/x86_64  Up       -                             /tidb-deploy/grafana-3000
00.00.00.001:2379   pd            00.00.00.001  2379/2380                        linux/x86_64  Up|L|UI  /tidb-data/pd-2379            /tidb-deploy/pd-2379
00.00.00.001:9090   prometheus    00.00.00.001  9090/12020                       linux/x86_64  Up       /tidb-data/prometheus-9090    /tidb-deploy/prometheus-9090
00.00.00.001:4000   tidb          00.00.00.001  4000/10080                       linux/x86_64  Up       -                             /tidb-deploy/tidb-4000
00.00.00.002:4000   tidb          00.00.00.002  4000/10080                       linux/x86_64  Up       -                             /tidb-deploy/tidb-4000
00.00.00.003:4000   tidb          00.00.00.003  4000/10080                       linux/x86_64  Up       -                             /tidb-deploy/tidb-4000
00.00.00.004:4000   tidb          00.00.00.004  4000/10080                       linux/x86_64  Up       -                             /tidb-deploy/tidb-4000
00.00.00.005:4000   tidb          00.00.00.005  4000/10080                       linux/x86_64  Up       -                             /tidb-deploy/tidb-4000
00.00.00.002:9000   tiflash       00.00.00.002  9000/8123/3930/20170/20292/8234  linux/x86_64  Up       /tidb-data/tiflash-9000       /tidb-deploy/tiflash-9000
00.00.00.003:9000   tiflash       00.00.00.003  9000/8123/3930/20170/20292/8234  linux/x86_64  Up       /tidb-data/tiflash-9000       /tidb-deploy/tiflash-9000
00.00.00.004:9000   tiflash       00.00.00.004  9000/8123/3930/20170/20292/8234  linux/x86_64  Up       /tidb-data/tiflash-9000       /tidb-deploy/tiflash-9000
00.00.00.005:9000   tiflash       00.00.00.005  9000/8123/3930/20170/20292/8234  linux/x86_64  Up       /tidb-data/tiflash-9000       /tidb-deploy/tiflash-9000
00.00.00.001:20160  tikv          00.00.00.001  20160/20180                      linux/x86_64  Up       /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
00.00.00.002:20160  tikv          00.00.00.002  20160/20180                      linux/x86_64  Up       /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
00.00.00.003:20160  tikv          00.00.00.003  20160/20180                      linux/x86_64  Up       /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
00.00.00.004:20160  tikv          00.00.00.004  20160/20180                      linux/x86_64  Up       /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
00.00.00.005:20160  tikv          00.00.00.005  20160/20180                      linux/x86_64  Up       /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
Total nodes: 18

【附件:截图/日志/监控】


检查过慢sql拿确实没有任何执行? show analyze status看看统计信息收集时间能对上不

可能真是收集统计信息的问题

负载高的时候在服务器上 top -Hp pidof tidb-server 看下是哪个线程繁忙

确实是在执行 analyze 操作:

貌似这个过程不受控制,该节点同时部署了 tidb 和 tikv,可能有争用内存的情况,不知道如何处理。

另外这张表有 1007 个字段,不知道 analyze 如此消耗资源是否跟表结构有关。

1007 个字段很夸张了,一般人遇不到

如果同时部署tidb和tikv,需要按混合部署方式进行组件资源限制
混合部署拓扑 | PingCAP 文档中心

三节点混合部署最佳实践 | PingCAP 文档中心

SHOW VARIABLES LIKE ‘%analyze%’
查看 统计信息的参数,可以修改自动统计信息的时间段

image

楼主找到原因了嘛

自动跑了 统计信息收集

感谢提醒,但经过检查发现,我当前的配置都是符合混合部署拓扑的配置的。而且混合部署的配置针对的是 tikv 组件,没有针对 tidb 组件的内存使用进行配置的项。

你的是 tidb 和tikv 在一起部署啦?

tidb内存限额配置

感谢提醒,目前先用这个配置来避免内存爆满的情况,虽然还不知道为什么分析表耗时那么久占那么多 CPU,但先观察一阵,如果实在不行就只能停用它的自动分析了。

你用的7.3? 这个是dev版本不稳定

生产直接上7.3 也是厉害了 :grinning: