Skip to content

Commit

Permalink
ticdc: add detailed instructions for verifying if TiCDC has synchroni…
Browse files Browse the repository at this point in the history
…zed all updates to downstream (#19055) (#19080)
  • Loading branch information
ti-chi-bot authored Nov 15, 2024
1 parent d0b0878 commit a44ff8e
Showing 1 changed file with 105 additions and 0 deletions.
105 changes: 105 additions & 0 deletions ticdc/ticdc-faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,111 @@ cdc cli changefeed list --server=http://127.0.0.1:8300
>
> 该功能在 TiCDC 4.0.3 版本引入。
## 上游停止更新后,如何判断 TiCDC 是否已将所有更新同步到下游?

在上游 TiDB 集群停止更新后,可以通过比较上游 TiDB 集群的最新 [TSO](/glossary.md#tso) 时间戳与 TiCDC 当前的同步进度判断同步是否完成。如果 TiCDC 的同步进度时间大于或等于上游 TiDB 集群的 TSO,则说明 TiCDC 已同步所有更新。具体操作步骤如下:

1. 获取上游 TiDB 集群的最新 TSO 时间戳。

> **注意:**
>
> 请使用 `TIDB_CURRENT_TSO()` 函数获取 TSO,而不是 `NOW()` 等查询当前时间的函数。
以下示例使用 [`TIDB_PARSE_TSO()`](/functions-and-operators/tidb-functions.md#tidb_parse_tso) 将 TSO 转换为可读的时间格式,便于后续比较:

```sql
BEGIN;
SELECT TIDB_PARSE_TSO(TIDB_CURRENT_TSO());
ROLLBACK;
```

输出结果示例如下:

```sql
+------------------------------------+
| TIDB_PARSE_TSO(TIDB_CURRENT_TSO()) |
+------------------------------------+
| 2024-11-12 20:35:34.848000 |
+------------------------------------+
```

2. 获取 TiCDC 当前的同步进度。

你可以通过以下两种方法之一检查当前的同步进度:

* **方法一**:查询同步任务的 Checkpoint(推荐)

使用 [TiCDC 命令行工具](/ticdc/ticdc-manage-changefeed.md) `cdc cli` 查看所有同步任务的 Checkpoint:

```shell
cdc cli changefeed list --server=http://127.0.0.1:8300
```

输出结果示例如下:

```json
[
{
"id": "syncpoint",
"namespace": "default",
"summary": {
"state": "normal",
"tso": 453880043653562372,
"checkpoint": "2024-11-12 20:36:01.447",
"error": null
}
}
]
```

在输出结果中,`"checkpoint": "2024-11-12 20:36:01.447"` 表示 TiCDC 当前的同步进度为 `2024-11-12 20:36:01.447`,即所有在该时间之前的上游 TiDB 变更已同步完成。如果该时间戳大于或等于步骤 1 中获取的上游 TiDB TSO 时间,则表示所有更新已经同步到下游。

* **方法二**:查询下游 TiDB 的 Syncpoint 信息

如果下游是 TiDB,并且已启用 [TiCDC Syncpoint 功能](/ticdc/ticdc-upstream-downstream-check.md),可以通过查询下游 TiDB 的 Syncpoint 信息获取同步进度。

> **注意:**
>
> Syncpoint 信息的更新间隔由 [`sync-point-interval`](/ticdc/ticdc-upstream-downstream-check.md#启用-syncpoint) 参数控制。如需获取最新同步进度,建议使用方法一。

在下游 TiDB 中执行以下 SQL 语句,获取上游 TSO (`primary_ts`) 和下游 TSO (`secondary_ts`) 信息。

```sql
SELECT * FROM tidb_cdc.syncpoint_v1;
```

输出结果示例如下:

```sql
+------------------+------------+--------------------+--------------------+---------------------+
| ticdc_cluster_id | changefeed | primary_ts | secondary_ts | created_at |
+------------------+------------+--------------------+--------------------+---------------------+
| default | syncpoint | 453879870259200000 | 453879870545461257 | 2024-11-12 20:25:01 |
| default | syncpoint | 453879948902400000 | 453879949214351361 | 2024-11-12 20:30:01 |
| default | syncpoint | 453880027545600000 | 453880027751907329 | 2024-11-12 20:35:00 |
+------------------+------------+--------------------+--------------------+---------------------+
```

在输出结果中,每一行表示上游 TiDB 在 `primary_ts` 时刻的 snapshot 与下游 TiDB 在 `secondary_ts` 时刻的 snapshot 一致。

要查看同步进度,可以将最新的 `primary_ts` 转换为可读的时间格式:

```sql
SELECT TIDB_PARSE_TSO(453880027545600000);
```

转换结果示例如下:

```sql
+------------------------------------+
| TIDB_PARSE_TSO(453880027545600000) |
+------------------------------------+
| 2024-11-12 20:35:00 |
+------------------------------------+
```

如果 `primary_ts` 对应的时间大于或等于步骤 1 中获取的上游 TiDB 集群的 TSO 时间戳,说明 TiCDC 已经将所有更新同步到下游。

## TiCDC 的 `gc-ttl` 是什么?

从 TiDB v4.0.0-rc.1 版本起,PD 支持外部服务设置服务级别 GC safepoint。任何一个服务可以注册更新自己服务的 GC safepoint。PD 会保证任何晚于该 GC safepoint 的 KV 数据不会在 TiKV 中被 GC 清理掉。
Expand Down

0 comments on commit a44ff8e

Please sign in to comment.