优化因调度功能不完善或者 I/O 限流不完善引起的性能抖动问题
TiDB 调度过程中会占用 I/O、Network、CPU、Memory 等资源,若不对调度的任务进行控制,QPS 和延时会因为资源被抢占而出现性能抖动问题。通过以下几项的优化,长期测试 72 小时,衡量 Sysbench TPS 抖动标准差的值从 11.09% 降低到 3.36%。
- 减少节点的容量总是在水位线附近波动引起的调度及 PD 的
store-limit
配置项设置过大引起的调度,引入一套新的调度算分公式并通过region-score-formula-version = v2
配置项启用新的调度算分公式 #3269 - 通过修改
enable-cross-table-merge = true
开启跨 Region 合并功能,减少空 Region 的数量 #3129 - TiKV 后台压缩数据会占用大量 I/O 资源,系统通过自动调整压缩的速度来平衡后台任务与前端的数据读写对 I/O 资源的争抢,通过
rate-limiter-auto-tuned
配置项开启此功能后,延迟抖动比未开启此功能时的抖动大幅减少 #18011 - TiKV 在进行垃圾数据回收和数据压缩时,分区会占用 CPU、I/O 资源,系统执行这两个任务过程中存在数据重叠。GC Compaction Filter 特性将这两个任务合二为一在同一个任务中完成,减 I/O 的占用。此特性为实验性特性,通过
gc.enable-compaction-filter = true
开启 #18009 - TiFlash 压缩或者整理数据会占用大量 I/O 资源,系统通过限制压缩或整理数据占用的 I/O 量缓解资源争抢。此特性为实验性特性,通过
bg_task_io_rate_limit
配置项开启限制压缩或整理数据 I/O 资源。