TiDB 的事务的实现采用了 MVCC(多版本并发控制)机制,当新写入的数据覆盖旧的数据时,旧的数据不会被替换掉,而是与新写入的数据同时保留,并以时间戳来区分版本。Garbage Collection (GC) 的任务便是清理不再需要的旧数据。
TiDB 中的垃圾回收(Garbage Collection,GC)是自动触发的,不需要手动触发。当 TiDB 中的数据发生变化时,TiDB 会自动将不再需要的数据标记为“垃圾”,并在后台异步地进行回收。这个过程是由 TiDB 的后台 GC 协程完成的。
如果您需要手动触发 TiDB 的 GC,可以通过以下两种方式之一来实现:
-
手动执行 GC SQL 语句
-
在 TiDB 中,可以手动执行 GC SQL 语句来触发 GC。执行 GC SQL 语句的方式如下:
这个 SQL 语句会将 TiDB 的 GC 配置参数设置为:
tidb_gc_run_interval:GC 执行的时间间隔,单位为秒。将其设置为 0 表示立即执行 GC。
tidb_gc_life_time:数据的 GC 保留时间,单位为秒。将其设置为 1 表示只保留 1 秒内的数据。
tidb_gc_safe_point:GC 的安全点,表示在这个时间点之前的数据都是安全的,不需要进行 GC。将其设置为当前时间即可。
执行完这个 SQL 语句后,TiDB 会立即执行 GC。
使用 TiDB 的 HTTP API
TiDB 还提供了 HTTP API,可以通过发送 HTTP 请求来触发 GC。具体操作步骤如下:
-
启动 TiDB 的 HTTP 服务。在 TiDB 的配置文件中,将 status.status-port 参数设置为一个非 0 的端口号,表示启用 HTTP 服务。
-
发送 HTTP 请求。可以使用 curl 命令或其他 HTTP 客户端工具来发送 HTTP 请求。请求的 URL 为 http://<tidb-server>:<status-port>/gc,其中 <tidb-server> 表示 TiDB 的 IP 地址或主机名,<status-port> 表示 HTTP 服务的端口号。
-
例如,要触发 IP 地址为 192.168.0.100 的 TiDB 实例的 GC,可以执行以下命令:
-
发送完请求后,TiDB 会立即执行 GC。
需要注意的是,手动触发 GC 可能会对 TiDB 的性能产生一定的影响,因此建议仅在必要时才手动触发 GC。如果您需要了解更多关于 TiDB 的 GC 的信息,可以参考 TiDB 官方文档中的 [1]。
参考文献: https://docs.pingcap.com/zh/tidb/stable/garbage-collection-overview
标签:触发,手动,HTTP,Garbage,SQL,Collection,GC,TiDB From: https://blog.51cto.com/shawnyan/7068700