垃圾回收配置
你可以通过以下系统变量配置垃圾回收(GC):
tidb_gc_enable:控制是否为 TiKV 启用垃圾回收。tidb_gc_run_interval:指定 GC 的运行间隔。tidb_gc_life_time:指定每次 GC 保留数据的时间上限。tidb_gc_concurrency:指定 GC 的 Resolve Locks 步骤中线程的数量。tidb_gc_scan_lock_mode:指定 GC 的 Resolve Locks 步骤中扫描锁的方式。tidb_gc_max_wait_time:指定活跃事务阻塞 GC safe point 的最长时间。
关于如何修改系统变量的值,详见 系统变量。
GC I/O 限制
TiKV 支持 GC I/O 限制。你可以通过配置 gc.max-write-bytes-per-sec 来限制每秒 GC worker 的写入量,从而减少对正常请求的影响。
0 表示禁用此功能。
你可以使用 tikv-ctl 动态修改该配置:
tikv-ctl --host=ip:port modify-tikv-config -n gc.max-write-bytes-per-sec -v 10MB
TiDB 5.0 的变更
在 TiDB 早期版本中,垃圾回收通过 mysql.tidb 系统表进行配置。虽然对该表的修改仍然受支持,但推荐使用提供的系统变量进行配置。这样可以确保配置变更能够被校验,并防止出现意外行为(#20655)。
CENTRAL 垃圾回收模式已不再支持。将自动使用 DISTRIBUTED GC 模式(自 TiDB 3.0 起为默认模式)。该模式更高效,因为 TiDB 不再需要向每个 TiKV region 发送请求来触发垃圾回收。
关于早期版本的变更信息,请通过左侧菜单的 TIDB 版本选择器 查看本文件的历史版本。
TiDB 6.1.0 的变更
在 TiDB v6.1.0 之前,TiDB 中的事务不会影响 GC safe point。从 v6.1.0 开始,TiDB 在计算 GC safe point 时会考虑事务的 startTS,以解决待访问数据已被清理的问题。如果事务持续时间过长,safe point 会被长时间阻塞,影响应用性能。
在 TiDB v6.1.0 中,引入了系统变量 tidb_gc_max_wait_time 用于控制活跃事务阻塞 GC safe point 的最长时间。超过该值后,GC safe point 会被强制推进。
Compaction Filter 中的 GC
基于 DISTRIBUTED GC 模式,Compaction Filter 中的 GC 机制利用 RocksDB 的 compaction 过程,而不是单独的 GC worker 线程来执行 GC。该新 GC 机制有助于避免 GC 带来的额外磁盘读取。同时,在清理过期数据后,能够避免大量残留的 tombstone 标记,从而提升顺序扫描性能。
以下示例展示了如何在 TiKV 配置文件中启用该机制:
[gc]
enable-compaction-filter = true
你也可以通过动态修改配置来启用该 GC 机制。示例如下:
show config where type = 'tikv' and name like '%enable-compaction-filter%';
+------+-------------------+-----------------------------+-------+
| Type | Instance | Name | Value |
+------+-------------------+-----------------------------+-------+
| tikv | 172.16.5.37:20163 | gc.enable-compaction-filter | false |
| tikv | 172.16.5.36:20163 | gc.enable-compaction-filter | false |
| tikv | 172.16.5.35:20163 | gc.enable-compaction-filter | false |
+------+-------------------+-----------------------------+-------+
set config tikv gc.enable-compaction-filter = true;
show config where type = 'tikv' and name like '%enable-compaction-filter%';
+------+-------------------+-----------------------------+-------+
| Type | Instance | Name | Value |
+------+-------------------+-----------------------------+-------+
| tikv | 172.16.5.37:20163 | gc.enable-compaction-filter | true |
| tikv | 172.16.5.36:20163 | gc.enable-compaction-filter | true |
| tikv | 172.16.5.35:20163 | gc.enable-compaction-filter | true |
+------+-------------------+-----------------------------+-------+