近期依托平凯平台《303-TiDB 数据库管理》1021 分钟精品课程,从 TiKV 线程池原理、读写链路、热点优化、MVCC 闪回、多机房高可用 5 大模块落地生产级实操,课程内容完全贴合线上运维场景,本文结合课程知识点 + 真实集群实操记录,分享落地过程与踩坑经验,给 TiDB 运维从业者参考。
一、TiKV 内存 & 线程池实操:定位 OOM 与读写延迟根源
1.读慢故障复现人为构造全表无索引扫描 SQL,监控查看TiKV-Details→Thread CPU→Unified read pool指标快速打满,读请求排队堆积,完全对应课程描述:UnifiedReadPool 为 TiKV 读请求专属线程池,池耗尽直接引发全集群读超时;优化手段:补充索引、拆分超大结果集 SQL,快速释放读线程资源。
2.TiKV OOM 故障复现测试修改rocksdb.block-cache-size参数超出服务器物理内存 45% 推荐阈值,配合大批量 Truncate 操作,RocksDB Block Cache 抢占系统内存触发 OOM;参照课程方案:下调 block-cache 至合理占比、管控大事务写入,规避内存溢出。
二、热点问题实操:自增主键 Insert 热点拆分落地
1.自增 INT 主键热点:建表时添加AUTO_RANDOM主键属性,对比改造前后 Region 分布:改造前所有 INSERT 数据集中单 Region、单 TiKV 节点 CPU 跑满;改造后数据随机打散到全集群 Region,各 Store 写入负载均衡。
2.非整型主键小表读热点:开启Load Base Split自动分裂,原本单 Region 高频访问小表被自动拆分为多 Region,分散多节点分摊读 QPS,解决单点读负载过高问题。
三、MVCC 误删数据恢复实操:Recover Table & Flashback 落地
1.DROP TABLE 误删:使用FLASHBACK TABLE 表名 TO BEFORE DROP快速找回整表数据;
2.TRUNCATE TABLE 误删:采用RECOVER TABLE语法,依赖 MVCC 历史版本在 GC 生命周期内找回全量数据;
实操关键点:参数
tidb_gc_life_time控制历史数据保留时长,如需延长可临时调大,避免误删数据被 GC 清理无法找回。
四、PD 调度实操:解决 Leader 分布不均衡
1.通过 pd-ctl 查看各 Store Leader 数量,发现部分节点 Leader 扎堆;
2.排查原因:集群存在热点 Region + 大量极小空 Region;
3.落地优化:开启Region Merge自动合并细碎小 Region,按需调整leader-weight权重,PD 自动调度 Leader 迁移,最终全集群 Leader 分布趋于均衡。
五、多机房高可用架构实操:同城双 / 三中心 RPO 验证
1.同城三中心(Raft 三副本分 3IDC):单机房整体断电故障,剩余 2 个 IDC 副本满足 Raft 过半机制,集群无数据丢失(RPO=0),PD 自动重新选举 Leader,业务无缝切换;
2.同城双中心同步复制:单机房宕机,备中心全量同步数据,RPO=0,可直接切主;
3.同城双中心异步复制:主机房突发故障,备库存在少量数据延迟,RPO>0,需补齐滞后 binlog 数据。