execute sql panic tidb load mysql.user fail out of memory

【 TiDB 使用环境】生产环境
【 TiDB 版本】6.1.2
【复现路径】做过哪些操作出现的问题。

我们昨天晚上有做参数修改,目前有两个操作行为,不知道是那个引起的,我们在mysql客户端上执行,set GLOBAL tidb_mem_quota_query = 10240000; 这个大小上9mb,至于为什么会这样,是因为我们开始的时候设置更大的值,但是每次查询的结果都没有修改。所以我们修改了很多次在后面删了几个0。

发现没有效果后,我们就去配置参数那边修改了两个参数,一个是tidb_mem_quota_query,一个是performance.txn-total-size-limit,然后滚动更新后发现tidb无法启动。就开始一直报错。

我们后来回去排查的时候,发现performance.txn-total-size-limit 设置的比tidb_mem_quota_query还小。

但是我们操作的时候有两个pd,两个tidb,3个tikv,有一台ip71服务器上安装了pd上和tidb,在我们滚动更新的时候是没有更新成功的 ,这时候另外一个tidb客户端70已经挂了,但是还可以通过71连接到tidb,但是会弹出内存溢出的错误。

之后重启了tidb集群,出现pd无法选举的问题。试了很多办法都没有办法解决,我们把整个集群,除了tikv的数据盘没有还原到25号凌晨2点的快照外,其他所有的盘都做了一次还原,也包括tiup的机器。

【遇到的问题:问题现象及影响】目前tipd节点无法启动,而其他节点都正常启动。我的推测是要么是系统表损坏了,要么是参数固化存到了tikv上,所以目前不知道如何修复,现在生产环境停摆,麻烦大家帮帮忙。
【资源配置】
【附件:截图/日志/监控】

怎么修改的参数,不能用edit-config修改大点再reload吗?

现在进入后台,编辑过参数,然后reload,但是仍然无法启动。

报错还是和以前的 一样吗 ?? 不一样再发下报错

可以停掉集群不 ??

在config 文件 里面进行更改。试一试。

后台是哪个后台,tiup edit-config修改过吗?

他说的 后台 也有可能是 conf/tom的文件。 我建议edit-config 添加参数。 然后 集群全部重启下看看吧


我这测试 启动不成功 跟 参数没关系啊。
都能启动成功。。参数设置很小。导致的OOM行为吧

修改过配置。

global:
user: tidb
ssh_port: 22
ssh_type: builtin
deploy_dir: /data/tidb-deploy
data_dir: /data/tidb-data
os: linux
monitored:
node_exporter_port: 9100
blackbox_exporter_port: 9115
deploy_dir: /data/tidb-deploy/monitor-9100
data_dir: /data/tidb-data/monitor-9100
log_dir: /data/tidb-deploy/monitor-9100/log
server_configs:
tidb:
binlog.enable: false
binlog.ignore-error: false
log.slow-threshold: 300
mem-quota-query: 1073741824
new_collations_enabled_on_first_bootstrap: false
performance.txn-total-size-limit: 1073741824
tikv:
readpool.coprocessor.use-unified-pool: true
readpool.storage.use-unified-pool: false
pd:
schedule.leader-schedule-limit: 4
schedule.region-schedule-limit: 2048
schedule.replica-schedule-limit: 64
tidb_dashboard: {}
tiflash: {}
tiflash-learner: {}
pump: {}
drainer: {}
cdc: {}
kvcdc: {}
grafana: {}
tidb_servers:

  • host: 172.16.16.70
    ssh_port: 22
    port: 4000
    status_port: 10080
    deploy_dir: /data/tidb-deploy/tidb-4000
    log_dir: /data/tidb-deploy/tidb-4000/log
    arch: amd64
    os: linux
    tikv_servers:
  • host: 172.16.16.80
    ssh_port: 22
    port: 20160
    status_port: 20180
    deploy_dir: /data/tidb-deploy/tikv-20160
    data_dir: /data/tidb-data/tikv-20160
    log_dir: /data/tidb-deploy/tikv-20160/log
    arch: amd64
    os: linux
  • host: 172.16.16.81
    ssh_port: 22
    port: 20160
    status_port: 20180
    deploy_dir: /data/tidb-deploy/tikv-20160
    data_dir: /data/tidb-data/tikv-20160
    – INSERT –

这是目前的配置

目前怀疑是这个参数设置过小,导致读取用户权限表都无法读取成功。但是我通过编辑tiup cluster edit-config tidb-prod,我刚另外的一个回复贴出了配置,你看下。目前我不知道如何做了。

由于我们把tiup,tidb,pd,这些节点,包括tikv的系统盘都做了还原,所以真正能受影响的就是tikv的数据盘了,所以我们怀疑是参数持久化写入到了tikv导致无法启动,目前在寻求一个办法可以去修改tikv内,持久化到参数选项。

从官方文档得知,现在配置文件的参数已经无法生效了,都在6.1版本中删除了,全部都持久化到系统变量进去了。https://docs.pingcap.com/zh/tidb/dev/release-6.1.0/#易用性

tidb_mem_quota_query 修改 增加 GLOBAL 作用域,变量值可以持久化到集群。

TiDB mem-quota-query 删除 转化为系统变量 tidb_mem_quota_query。该配置项不再生效,如需修改,需修改对应的系统变量。求官方寻求一个在tidb无法启动,无法通过客户端修改变量情况下都修改方法。

改 Toml 文件。但是会被 tiup 刷掉。临时用吧 。

global variables 是固化到tikv, 只能通过tidb来修改。