TiDB-server下线引起集群抖动

乡在人间
Tue, 04 Mar 2025 06:32:44 +0000

一、核心抖动触发机制
当 TiDB-Server 节点下线时，可能触发以下四类集群抖动：

1. 分布式事务雪崩效应
正在处理的分布式事务因节点下线中断，触发 TiDB 事务管理器的自动重试机制。大量事务重试请求会集中冲击其他 TiDB-Server 节点，导致其工作线程池（如 Golang 的 Goroutine 调度器）出现调度延迟。典型表现为tidb_retry指标突增和process_cpu_usage瞬时冲高。

2. PD 元信息更新延迟
TiDB-Server 注册信息在 PD 的 etcd 存储中存在心跳保活机制（默认 2 秒 TTL）。节点下线后，PD 需要完成 Leader 重新选举（通过 Raft 协议）和路由表更新。若 PD 节点高负载时，元信息同步延迟会导致客户端出现短时路由错误，触发ErrTiKVServerTimeout连锁反应。

3. TiKV Region 负载突变
每个 TiDB-Server 维护本地 Region 缓存（Region Cache）。节点下线后，客户端连接池（如 Go-TiDB 的connPool）会重新建立到其他 TiDB-Server 的连接，导致这些节点同时发起 Region Cache 预热操作，引发 TiKV 的batch_requests量激增。若未开启流控，可能触发 TiKV 的server_is_busy保护机制。

4. 内存回收竞争
突然释放大量连接资源（如每个 TiDB-Server 默认维持 1,600 个连接）会导致 Go 运行时内存回收器（GC）出现 STW 停顿。通过 Go 的GODEBUG=gctrace=1日志可观测到GC forced标记，此时业务 SQL 的execution_latency会出现尖峰。

阅读完整话题