From bb6b1af63487b4b59b33d85318732a0e80c408eb Mon Sep 17 00:00:00 2001 From: NingLin-P Date: Thu, 24 Jun 2021 17:53:24 +0800 Subject: [PATCH] Add note about stale read (#6518) --- as-of-timestamp.md | 12 +++++++++++- experimental-features.md | 1 + stale-read.md | 4 ++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/as-of-timestamp.md b/as-of-timestamp.md index 6d023bc44cc6..adfae5f46aa4 100644 --- a/as-of-timestamp.md +++ b/as-of-timestamp.md @@ -7,6 +7,10 @@ summary: 了解如何使用 AS OF TIMESTAMP 语法读取历史数据。 本文档介绍如何通过 `AS OF TIMESTAMP` 语句使用 [Stale Read](/stale-read.md) 功能来读取 TiDB 历史版本数据,包括具体的操作示例以及历史数据的保存策略。 +> **警告:** +> +> Stale Read 目前为实验特性。不推荐在生产环境下使用该特性。 + TiDB 支持通过标准 SQL 接口,即通过 `AS OF TIMESTAMP` SQL 语法的形式读取历史数据,无需特殊的服务器或者驱动器。当数据被更新或删除后,你可以通过 SQL 接口将更新或删除前的数据读取出来。 > **注意:** @@ -32,7 +36,13 @@ TiDB 支持通过标准 SQL 接口,即通过 `AS OF TIMESTAMP` SQL 语法的 - `AS OF TIMESTAMP TIDB_BOUNDED_STALENESS('2016-10-08 16:45:26', '2016-10-08 16:45:29')` 表示读取在 2016 年 10 月 8 日 16 点 45 分 26 秒到 29 秒的时间范围内尽可能新的数据。 - `AS OF TIMESTAMP TIDB_BOUNDED_STALENESS(NOW() - INTERVAL 20 SECOND, NOW())` 表示读取 20 秒前到现在的时间范围内尽可能新的数据。 -注意: 除了指定时间戳,`AS OF TIMESTAMP` 语法最常用使用的方式是读几秒前的数据。如果采用这种方式,取值范围推荐为读 5 秒以上的历史数据。 +> **注意:** +> +> 除了指定时间戳,`AS OF TIMESTAMP` 语法最常用使用的方式是读几秒前的数据。如果采用这种方式,推荐读 5 秒以上的历史数据。 +> +> 使用 Stale Read 时需要为 TiDB 和 PD 节点部署 NTP 服务,防止 TiDB 指定的时间戳超过当前最新的 TSO 分配进度(如几秒后的时间戳),或者超前于 GC safe point 的时间戳。当指定的时间戳超过服务范围,TiDB 会产生报错或者等待事务提交等行为。 +> +> `Prepare` 语句与 `AS OF TIMESTAMP` 语法的兼容支持尚不完善,不推荐同时使用。 ## 示例 diff --git a/experimental-features.md b/experimental-features.md index 5f918f61bce1..a7ee358e71cb 100644 --- a/experimental-features.md +++ b/experimental-features.md @@ -29,6 +29,7 @@ summary: 了解 TiDB 各版本的实验特性。 + [自定义变量](/user-defined-variables.md#用户自定义变量)。 + [JSON 数据类型](/data-type-json.md) 及 [JSON 函数](/functions-and-operators/json-functions.md)。 + [View](/information-schema/information-schema-views.md)。 ++ [Stale Read](/stale-read.md)。 ## 配置管理 diff --git a/stale-read.md b/stale-read.md index fc791f390ae0..4178649b9026 100644 --- a/stale-read.md +++ b/stale-read.md @@ -9,6 +9,10 @@ summary: 介绍 Stale Read 功能和使用场景。 在内部实现上,TiDB 通过 Stale Read 可以从任意一个副本上读取到该指定时间点或时间范围内尽可能新的数据,并在这个过程中始终保证数据的一致性约束。 +> **警告:** +> +> Stale Read 目前为实验特性。不推荐在生产环境下使用该特性。 + ## 场景描述 + 场景一:如果一个事务仅涉及只读操作,并且一定程度上可容忍牺牲实时性,你可以使用 Stale Read 功能来读取历史数据。由于牺牲了一定的实时性,使用 Stale Read 后,TiDB 可将请求发送到对应数据的任意一个副本,使得查询的执行获得更大的吞吐量。