From 2c91e505d4d6aa89925c874cd168a899d32dac02 Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Thu, 25 Feb 2021 13:34:52 +0800 Subject: [PATCH 01/21] update async commit related documentations Signed-off-by: Yilin Chen --- .../sql-statement-start-transaction.md | 10 +++- tidb-configuration-file.md | 13 ---- tiup/tiup-cluster.md | 2 +- transaction-overview.md | 60 +++++++++++++++++++ 4 files changed, 70 insertions(+), 15 deletions(-) diff --git a/sql-statements/sql-statement-start-transaction.md b/sql-statements/sql-statement-start-transaction.md index 374852d27f2b..adaaa4b64fc4 100644 --- a/sql-statements/sql-statement-start-transaction.md +++ b/sql-statements/sql-statement-start-transaction.md @@ -14,7 +14,14 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-start-transaction/','/docs- **BeginTransactionStmt:** -![BeginTransactionStmt](/media/sqlgram/BeginTransactionStmt.png) +```ebnf+diagram +BeginTransactionStmt + ::= 'BEGIN' ( 'PESSIMISTIC' | 'OPTIMISTIC' )? + | 'START' 'TRANSACTION' + ( 'READ' ( 'WRITE' | 'ONLY' ( 'WITH' 'TIMESTAMP' 'BOUND' TimestampBound )? ) + | 'WITH' 'CONSISTENT' 'SNAPSHOT' + | 'WITH' 'CAUSAL' 'CONSISTENCY' 'ONLY' )? +``` ## 示例 @@ -68,3 +75,4 @@ Query OK, 0 rows affected (0.01 sec) * [COMMIT](/sql-statements/sql-statement-commit.md) * [ROLLBACK](/sql-statements/sql-statement-rollback.md) * [BEGIN](/sql-statements/sql-statement-begin.md) +* [START TRANSACTION WITH CAUSAL CONSISTENCY ONLY](/transaction-overview.md#因果一致性事务) \ No newline at end of file diff --git a/tidb-configuration-file.md b/tidb-configuration-file.md index 34943c4c95a2..47238731f712 100644 --- a/tidb-configuration-file.md +++ b/tidb-configuration-file.md @@ -474,19 +474,6 @@ prepare 语句的 plan cache 设置。 + TiKV 的负载阈值,如果超过此阈值,会收集更多的 batch 封包,来减轻 TiKV 的压力。仅在 `tikv-client.max-batch-size` 值大于 0 时有效,不推荐修改该值。 + 默认值:200 -## tikv-client.async-commit 从 v5.0.0-rc 版本开始引入 - -### `keys-limit` - -+ 指定一个 Async Commit 事务中键的数量上限。过大的事务不适合使用 Async Commit,超出该限制的事务会使用传统两阶段提交方式。 -+ 默认值:256 - -### `total-key-size-limit` - -+ 指定一个 Async Commit 事务中键的大小总和的上限。如果事务涉及的键过长,则不适合使用 Async Commit,超出该限制的事务会使用传统两阶段提交方式。 -+ 默认值:4096 -+ 单位:字节 - ## tikv-client.copr-cache 从 v4.0.0 版本开始引入 本部分介绍 Coprocessor Cache 相关的配置项。 diff --git a/tiup/tiup-cluster.md b/tiup/tiup-cluster.md index dcdfcb629edc..915bccc0e9fe 100644 --- a/tiup/tiup-cluster.md +++ b/tiup/tiup-cluster.md @@ -406,7 +406,7 @@ alertmanager_servers: - `grafana_servers` 的 `dashboard_dir` 字段指定的文件夹中应当含有完整的 `*.json` 文件。 - `monitoring_servers` 的 `rule_dir` 字段定义的文件夹中应当含有完整的 `*.rules.yml` 文件。 -- `alertmanager_servers` 的 `config_file` 格式请参考 [Alertmanager 配置模板](https://github.com/pingcap/tiup/blob/master/templates/config/alertmanager.yml)。 +- `alertmanager_servers` 的 `config_file` 格式请参考 [Alertmanager 配置模板](https://github.com/pingcap/tiup/blob/master/embed/templates/config/alertmanager.yml)。 在执行 `tiup reload` 时,TiUP 会将中控机上对应的配置上传到目标机器对应的配置目录中,上传之前会删除目标机器中已有的旧配置文件。如果想要修改某一个配置文件,请确保将所有的(包含未修改的)配置文件都放在同一个目录中。例如,要修改 Grafana 的 `tidb.json` 文件,可以先将 Grafana 的 `dashboards` 目录中所有的 `*.json` 文件拷贝到本地目录中,再修改 `tidb.json` 文件。否则最终的目标机器上将缺失其他的 JSON 文件。 diff --git a/transaction-overview.md b/transaction-overview.md index b9e5ad6d91bf..25b843ff291e 100644 --- a/transaction-overview.md +++ b/transaction-overview.md @@ -38,6 +38,12 @@ START TRANSACTION; START TRANSACTION WITH CONSISTENT SNAPSHOT; ``` +{{< copyable "sql" >}} + +```sql +START TRANSACTION WITH CAUSAL CONSISTENCY ONLY; +``` + 如果执行以上语句时,当前 Session 正处于一个事务的中间过程,那么系统会先自动提交当前事务,再开启一个新的事务。 > **注意:** @@ -292,3 +298,57 @@ TiDB 中,单个事务的总大小默认不超过 100 MB,这个默认值可 > 通常,用户会开启 TiDB Binlog 将数据向下游进行同步。某些场景下,用户会使用消息中间件来消费同步到下游的 binlog,例如 Kafka。 > > 以 Kafka 为例,Kafka 的单条消息处理能力的上限是 1 GB。因此,当把 `txn-total-size-limit` 设置为 1 GB 以上时,可能出现事务在 TiDB 中执行成功,但下游 Kafka 报错的情况。为避免这种情况出现,请用户根据最终消费者的限制来决定 `txn-total-size-limit` 的实际大小。例如:下游使用了 Kafka,则 `txn-total-size-limit` 不应超过 1 GB。 + +## 因果一致性事务 + +TiDB 从 5.0 版本开始支持开启因果一致性的事务。因果一致性的事务在提交时无需向 PD 获取时间戳,所以提交延迟更低。开启因果一致性事务的语法为: + +{{< copyable "sql" >}} + +```sql +START TRANSACTION WITH CAUSAL CONSISTENCY ONLY; +``` + +默认情况下,TiDB 保证线性一致性。在线性一致性的情况下,如果事务 B 在事务 A 提交完成后提交,逻辑上事务 B 就应该在事务 A 后发生。 + +因果一致性弱于线性一致性。在因果一致性的情况下,上面的性质只在事务 A 和事务 B 加锁或写入的数据有交集,即有数据库可知的因果关系时保证成立。目前暂不支持传入数据库外部的因果关系。 + +### 有潜在因果关系的事务之间的逻辑顺序与物理提交顺序一致 + +| 事务 1 | 事务 2 | +|-------|-------| +| START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | +| x = SELECT v FROM t where id = 1 FOR UPDATE | | +| UPDATE t set v = $(x + 1) where id = 2 | | +| COMMIT | | +| | UPDATE t SET v = 2 where id = 1 | +| | COMMIT | + +上面的例子中,事务 1 对 id = 1 的记录加了锁,事务 2 的事务对 id = 1 的记录进行了修改,所以事务 1 和 事务 2 有潜在的因果关系。所以即使使用因果一致性开启事务,只要事务 2 在事务 1 提交成功后才提交,逻辑上事务 2 就必定比事务 1 晚发生。换句话说,不可能发生某个事务读到了事务 2 对 id = 1 记录的修改,但却没有读到事务 1 对 id = 2 记录的修改的情况。 + +### 不保证没有因果关系的事务之间的逻辑顺序 + +| 事务 1 | 事务 2 | +|-------|-------| +| START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | +| UPDATE t set v = 3 where id = 2 | | +| | UPDATE t SET v = 2 where id = 1 | +| COMMIT | | +| | COMMIT | + +和前一个例子不同,这个例子中,去掉了事务 1 对 id = 1 的记录的读取。此时事务 1 和事务 2 没有数据库可知的因果关系。如果使用因果一致性开启事务,即使物理时间上事务 2 在事务 1 提交完成后才开始提交,也不保证逻辑上事务 2 比事务 1 晚发生。 + +此时如果有一个事务 3 在事务 1 提交前开启,并在事务 2 提交后读取 id = 1 和 2 的记录,可能发生能读到事务 2 的写入,但却读不到事务 1 的写入的情况。 + +### 不加锁的读取不产生因果关系 + +| 事务 1 | 事务 2 | +|-------|-------| +| START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | +| | UPDATE t SET v = 2 where id = 1 | +| SELECT v FROM t where id = 1 | | +| UPDATE t set v = 3 where id = 2 | | +| | COMMIT | +| COMMIT | | + +这个例子展示了,不加锁的读取不产生因果关系,否则会产生写偏斜的异常,是不合理的。所以上面的例子中,使用因果一致性的事务 1 和事务 2 没有确定的逻辑顺序。 \ No newline at end of file From d6adaffa60b86c148ccdc59d8570e910d18b1b8c Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Thu, 25 Feb 2021 17:14:22 +0800 Subject: [PATCH 02/21] reformat EBNF Signed-off-by: Yilin Chen --- sql-statements/sql-statement-start-transaction.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/sql-statements/sql-statement-start-transaction.md b/sql-statements/sql-statement-start-transaction.md index adaaa4b64fc4..c316b62bf92f 100644 --- a/sql-statements/sql-statement-start-transaction.md +++ b/sql-statements/sql-statement-start-transaction.md @@ -15,12 +15,9 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-start-transaction/','/docs- **BeginTransactionStmt:** ```ebnf+diagram -BeginTransactionStmt - ::= 'BEGIN' ( 'PESSIMISTIC' | 'OPTIMISTIC' )? - | 'START' 'TRANSACTION' - ( 'READ' ( 'WRITE' | 'ONLY' ( 'WITH' 'TIMESTAMP' 'BOUND' TimestampBound )? ) - | 'WITH' 'CONSISTENT' 'SNAPSHOT' - | 'WITH' 'CAUSAL' 'CONSISTENCY' 'ONLY' )? +BeginTransactionStmt ::= + 'BEGIN' ( 'PESSIMISTIC' | 'OPTIMISTIC' )? +| 'START' 'TRANSACTION' ( 'READ' ( 'WRITE' | 'ONLY' ( 'WITH' 'TIMESTAMP' 'BOUND' TimestampBound )? ) | 'WITH' 'CONSISTENT' 'SNAPSHOT' | 'WITH' 'CAUSAL' 'CONSISTENCY' 'ONLY' )? ``` ## 示例 @@ -75,4 +72,4 @@ Query OK, 0 rows affected (0.01 sec) * [COMMIT](/sql-statements/sql-statement-commit.md) * [ROLLBACK](/sql-statements/sql-statement-rollback.md) * [BEGIN](/sql-statements/sql-statement-begin.md) -* [START TRANSACTION WITH CAUSAL CONSISTENCY ONLY](/transaction-overview.md#因果一致性事务) \ No newline at end of file +* [START TRANSACTION WITH CAUSAL CONSISTENCY ONLY](/transaction-overview.md#因果一致性事务) From 1200697b06a876f3c5cc5f7f7a450e977c15db8e Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Tue, 2 Mar 2021 10:57:49 +0800 Subject: [PATCH 03/21] polish up Signed-off-by: Yilin Chen --- transaction-overview.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/transaction-overview.md b/transaction-overview.md index 25b843ff291e..ab4d1e8d5568 100644 --- a/transaction-overview.md +++ b/transaction-overview.md @@ -313,8 +313,16 @@ START TRANSACTION WITH CAUSAL CONSISTENCY ONLY; 因果一致性弱于线性一致性。在因果一致性的情况下,上面的性质只在事务 A 和事务 B 加锁或写入的数据有交集,即有数据库可知的因果关系时保证成立。目前暂不支持传入数据库外部的因果关系。 +采用因果一致性的两个事务有以下特性: + ++ 有潜在因果关系的事务之间的逻辑顺序与物理提交顺序一致 ++ 不保证没有因果关系的事务之间的逻辑顺序 ++ 不加锁的读取不产生因果关系 + ### 有潜在因果关系的事务之间的逻辑顺序与物理提交顺序一致 +假设事务 1 和 事务 2 都采用因果一致性,并先后执行如下语句: + | 事务 1 | 事务 2 | |-------|-------| | START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | @@ -328,6 +336,8 @@ START TRANSACTION WITH CAUSAL CONSISTENCY ONLY; ### 不保证没有因果关系的事务之间的逻辑顺序 +假设事务 1 和 事务 2 都采用因果一致性,并先后执行如下语句: + | 事务 1 | 事务 2 | |-------|-------| | START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | @@ -342,6 +352,8 @@ START TRANSACTION WITH CAUSAL CONSISTENCY ONLY; ### 不加锁的读取不产生因果关系 +假设事务 1 和 事务 2 都采用因果一致性,并先后执行如下语句: + | 事务 1 | 事务 2 | |-------|-------| | START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | @@ -351,4 +363,4 @@ START TRANSACTION WITH CAUSAL CONSISTENCY ONLY; | | COMMIT | | COMMIT | | -这个例子展示了,不加锁的读取不产生因果关系,否则会产生写偏斜的异常,是不合理的。所以上面的例子中,使用因果一致性的事务 1 和事务 2 没有确定的逻辑顺序。 \ No newline at end of file +这个例子展示了,不加锁的读取不产生因果关系,否则会产生写偏斜的异常,是不合理的。所以上面的例子中,使用因果一致性的事务 1 和事务 2 没有确定的逻辑顺序。 From 64bde04300bdf723d132c042d658e81ba7a01e43 Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Tue, 2 Mar 2021 10:59:54 +0800 Subject: [PATCH 04/21] fix a broken link Signed-off-by: Yilin Chen --- tiup/tiup-dm-topology-reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tiup/tiup-dm-topology-reference.md b/tiup/tiup-dm-topology-reference.md index 124c299dbf40..5303b20ac646 100644 --- a/tiup/tiup-dm-topology-reference.md +++ b/tiup/tiup-dm-topology-reference.md @@ -6,7 +6,7 @@ title: 通过 TiUP 部署 DM 集群的拓扑文件配置 在部署或扩容 TiDB Data Migration (DM) 集群时,需要提供一份拓扑文件来描述集群拓扑,同样,修改配置也是通过编辑拓扑文件来实现的,区别在于修改配置时仅允许修改部分字段。 -拓扑文件[示例参考](https://github.com/pingcap/tiup/blob/master/examples/dm/topology.example.yaml)。 +拓扑文件[示例参考](https://github.com/pingcap/tiup/blob/master/embed/templates/examples/dm/topology.example.yaml)。 ## 文件结构 From f5914a198f0e8a0c7177db93fe61395dde96ff84 Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Thu, 4 Mar 2021 16:27:34 +0800 Subject: [PATCH 05/21] apply suggestions from reviews Signed-off-by: Yilin Chen --- transaction-overview.md | 42 +++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/transaction-overview.md b/transaction-overview.md index ab4d1e8d5568..3b8a22273f03 100644 --- a/transaction-overview.md +++ b/transaction-overview.md @@ -316,7 +316,7 @@ START TRANSACTION WITH CAUSAL CONSISTENCY ONLY; 采用因果一致性的两个事务有以下特性: + 有潜在因果关系的事务之间的逻辑顺序与物理提交顺序一致 -+ 不保证没有因果关系的事务之间的逻辑顺序 ++ 无因果关系的事务之间的逻辑顺序得不到保证 + 不加锁的读取不产生因果关系 ### 有潜在因果关系的事务之间的逻辑顺序与物理提交顺序一致 @@ -326,29 +326,31 @@ START TRANSACTION WITH CAUSAL CONSISTENCY ONLY; | 事务 1 | 事务 2 | |-------|-------| | START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | -| x = SELECT v FROM t where id = 1 FOR UPDATE | | -| UPDATE t set v = $(x + 1) where id = 2 | | +| x = SELECT v FROM t WHERE id = 1 FOR UPDATE | | +| UPDATE t set v = $(x + 1) WHERE id = 2 | | | COMMIT | | -| | UPDATE t SET v = 2 where id = 1 | +| | UPDATE t SET v = 2 WHERE id = 1 | | | COMMIT | -上面的例子中,事务 1 对 id = 1 的记录加了锁,事务 2 的事务对 id = 1 的记录进行了修改,所以事务 1 和 事务 2 有潜在的因果关系。所以即使使用因果一致性开启事务,只要事务 2 在事务 1 提交成功后才提交,逻辑上事务 2 就必定比事务 1 晚发生。换句话说,不可能发生某个事务读到了事务 2 对 id = 1 记录的修改,但却没有读到事务 1 对 id = 2 记录的修改的情况。 +上面的例子中,事务 1 对 `id = 1` 的记录加了锁,事务 2 的事务对 `id = 1` 的记录进行了修改,所以事务 1 和 事务 2 有潜在的因果关系。所以即使用因果一致性开启事务,只要事务 2 在事务 1 提交成功后才提交,逻辑上事务 2 就必定比事务 1 晚发生。因此,不存在某个事务读到了事务 2 对 `id = 1` 记录的修改,但却没有读到事务 1 对 `id = 2` 记录的修改的情况。 -### 不保证没有因果关系的事务之间的逻辑顺序 +### 无因果关系的事务之间的逻辑顺序得不到保证 -假设事务 1 和 事务 2 都采用因果一致性,并先后执行如下语句: +假设 `id = 1` 和 `id = 2` 的记录最初值都为 0,事务 1 和 事务 2 都采用因果一致性,并先后执行如下语句: -| 事务 1 | 事务 2 | -|-------|-------| -| START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | -| UPDATE t set v = 3 where id = 2 | | -| | UPDATE t SET v = 2 where id = 1 | -| COMMIT | | -| | COMMIT | +| 事务 1 | 事务 2 | 事务 3 | +|-------|-------|-------| +| START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | | +| UPDATE t set v = 3 WHERE id = 2 | | | +| | UPDATE t SET v = 2 WHERE id = 1 | | +| | | BEGIN | +| COMMIT | | | +| | COMMIT | | +| | | SELECT v FROM t WHERE id IN (1, 2) | -和前一个例子不同,这个例子中,去掉了事务 1 对 id = 1 的记录的读取。此时事务 1 和事务 2 没有数据库可知的因果关系。如果使用因果一致性开启事务,即使物理时间上事务 2 在事务 1 提交完成后才开始提交,也不保证逻辑上事务 2 比事务 1 晚发生。 +在本例中,事务 1 不读取 `id = 1` 的记录。此时事务 1 和事务 2 没有数据库可知的因果关系。如果使用因果一致性开启事务,即使物理时间上事务 2 在事务 1 提交完成后才开始提交,TiDB 也不保证逻辑上事务 2 比事务 1 晚发生。 -此时如果有一个事务 3 在事务 1 提交前开启,并在事务 2 提交后读取 id = 1 和 2 的记录,可能发生能读到事务 2 的写入,但却读不到事务 1 的写入的情况。 +此时如果有一个事务 3 在事务 1 提交前开启,并在事务 2 提交后读取 `id = 1` 和 `id = 2` 的记录,事务 3 可能读到 `id = 1` 的值为 2,而 `id = 2` 的值为 0。 ### 不加锁的读取不产生因果关系 @@ -357,10 +359,10 @@ START TRANSACTION WITH CAUSAL CONSISTENCY ONLY; | 事务 1 | 事务 2 | |-------|-------| | START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | START TRANSACTION WITH CAUSAL CONSISTENCY ONLY | -| | UPDATE t SET v = 2 where id = 1 | -| SELECT v FROM t where id = 1 | | -| UPDATE t set v = 3 where id = 2 | | +| | UPDATE t SET v = 2 WHERE id = 1 | +| SELECT v FROM t WHERE id = 1 | | +| UPDATE t set v = 3 WHERE id = 2 | | | | COMMIT | | COMMIT | | -这个例子展示了,不加锁的读取不产生因果关系,否则会产生写偏斜的异常,是不合理的。所以上面的例子中,使用因果一致性的事务 1 和事务 2 没有确定的逻辑顺序。 +如本例所示,不加锁的读取不产生因果关系。事务 1 和事务 2 产生了写偏斜的异常,如果他们有业务上的因果关系,则是不合理的。所以本例中,使用因果一致性的事务 1 和事务 2 没有确定的逻辑顺序。 From 748952d1397c12a1e3267d3173c9bf6f5d60c742 Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Tue, 9 Mar 2021 20:04:01 +0800 Subject: [PATCH 06/21] Update transaction-overview.md --- transaction-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transaction-overview.md b/transaction-overview.md index 3b8a22273f03..683762812965 100644 --- a/transaction-overview.md +++ b/transaction-overview.md @@ -350,7 +350,7 @@ START TRANSACTION WITH CAUSAL CONSISTENCY ONLY; 在本例中,事务 1 不读取 `id = 1` 的记录。此时事务 1 和事务 2 没有数据库可知的因果关系。如果使用因果一致性开启事务,即使物理时间上事务 2 在事务 1 提交完成后才开始提交,TiDB 也不保证逻辑上事务 2 比事务 1 晚发生。 -此时如果有一个事务 3 在事务 1 提交前开启,并在事务 2 提交后读取 `id = 1` 和 `id = 2` 的记录,事务 3 可能读到 `id = 1` 的值为 2,而 `id = 2` 的值为 0。 +此时如果有一个事务 3 在事务 1 提交前开启,并在事务 2 提交后读取 `id = 1` 和 `id = 2` 的记录,事务 3 可能读到 `id = 1` 的值为 2 但是 `id = 2` 的值为 0。 ### 不加锁的读取不产生因果关系 From 511192e85a69cfdbe748a609b9fff13608c22ca6 Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Thu, 11 Mar 2021 11:11:17 +0800 Subject: [PATCH 07/21] add links to the properties of causal consistency Signed-off-by: Yilin Chen --- transaction-overview.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/transaction-overview.md b/transaction-overview.md index 683762812965..8fb77ec54d7b 100644 --- a/transaction-overview.md +++ b/transaction-overview.md @@ -315,9 +315,9 @@ START TRANSACTION WITH CAUSAL CONSISTENCY ONLY; 采用因果一致性的两个事务有以下特性: -+ 有潜在因果关系的事务之间的逻辑顺序与物理提交顺序一致 -+ 无因果关系的事务之间的逻辑顺序得不到保证 -+ 不加锁的读取不产生因果关系 ++ [有潜在因果关系的事务之间的逻辑顺序与物理提交顺序一致](#有潜在因果关系的事务之间的逻辑顺序与物理提交顺序一致) ++ [无因果关系的事务之间的逻辑顺序得不到保证](#无因果关系的事务之间的逻辑顺序得不到保证) ++ [不加锁的读取不产生因果关系](#不加锁的读取不产生因果关系) ### 有潜在因果关系的事务之间的逻辑顺序与物理提交顺序一致 From 17424a022c88387f85c51b9c340548e4048e7a80 Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Thu, 11 Mar 2021 18:53:25 +0800 Subject: [PATCH 08/21] address comments Signed-off-by: Yilin Chen --- transaction-overview.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/transaction-overview.md b/transaction-overview.md index 8fb77ec54d7b..457c94a8b942 100644 --- a/transaction-overview.md +++ b/transaction-overview.md @@ -309,14 +309,14 @@ TiDB 从 5.0 版本开始支持开启因果一致性的事务。因果一致性 START TRANSACTION WITH CAUSAL CONSISTENCY ONLY; ``` -默认情况下,TiDB 保证线性一致性。在线性一致性的情况下,如果事务 B 在事务 A 提交完成后提交,逻辑上事务 B 就应该在事务 A 后发生。 +默认情况下,TiDB 保证线性一致性。在线性一致性的情况下,如果事务 2 在事务 1 提交完成后提交,逻辑上事务 2 就应该在事务 1 后发生。 -因果一致性弱于线性一致性。在因果一致性的情况下,上面的性质只在事务 A 和事务 B 加锁或写入的数据有交集,即有数据库可知的因果关系时保证成立。目前暂不支持传入数据库外部的因果关系。 +因果一致性弱于线性一致性。在因果一致性的情况下, 只有事务 1 和事务 2 加锁或写入的数据有交集时(即事务 1 和事务 2 存在数据库可知的因果关系时),才能保证事务的提交顺序与事务的发生顺序保持一致。目前暂不支持传入数据库外部的因果关系。 采用因果一致性的两个事务有以下特性: + [有潜在因果关系的事务之间的逻辑顺序与物理提交顺序一致](#有潜在因果关系的事务之间的逻辑顺序与物理提交顺序一致) -+ [无因果关系的事务之间的逻辑顺序得不到保证](#无因果关系的事务之间的逻辑顺序得不到保证) ++ [无因果关系的事务之间的逻辑顺序与物理提交顺序不保证一致](#无因果关系的事务之间的逻辑顺序与物理提交顺序不一定一致) + [不加锁的读取不产生因果关系](#不加锁的读取不产生因果关系) ### 有潜在因果关系的事务之间的逻辑顺序与物理提交顺序一致 @@ -334,7 +334,7 @@ START TRANSACTION WITH CAUSAL CONSISTENCY ONLY; 上面的例子中,事务 1 对 `id = 1` 的记录加了锁,事务 2 的事务对 `id = 1` 的记录进行了修改,所以事务 1 和 事务 2 有潜在的因果关系。所以即使用因果一致性开启事务,只要事务 2 在事务 1 提交成功后才提交,逻辑上事务 2 就必定比事务 1 晚发生。因此,不存在某个事务读到了事务 2 对 `id = 1` 记录的修改,但却没有读到事务 1 对 `id = 2` 记录的修改的情况。 -### 无因果关系的事务之间的逻辑顺序得不到保证 +### 无因果关系的事务之间的逻辑顺序与物理提交顺序不一定一致 假设 `id = 1` 和 `id = 2` 的记录最初值都为 0,事务 1 和 事务 2 都采用因果一致性,并先后执行如下语句: From 5392a972d9028d88a835807a00a77be14f2a5e01 Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Thu, 11 Mar 2021 19:10:24 +0800 Subject: [PATCH 09/21] address comments Signed-off-by: Yilin Chen --- transaction-overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/transaction-overview.md b/transaction-overview.md index 457c94a8b942..66337fe7f81c 100644 --- a/transaction-overview.md +++ b/transaction-overview.md @@ -316,7 +316,7 @@ START TRANSACTION WITH CAUSAL CONSISTENCY ONLY; 采用因果一致性的两个事务有以下特性: + [有潜在因果关系的事务之间的逻辑顺序与物理提交顺序一致](#有潜在因果关系的事务之间的逻辑顺序与物理提交顺序一致) -+ [无因果关系的事务之间的逻辑顺序与物理提交顺序不保证一致](#无因果关系的事务之间的逻辑顺序与物理提交顺序不一定一致) ++ [无因果关系的事务之间的逻辑顺序与物理提交顺序不保证一致](#无因果关系的事务之间的逻辑顺序与物理提交顺序不保证一致) + [不加锁的读取不产生因果关系](#不加锁的读取不产生因果关系) ### 有潜在因果关系的事务之间的逻辑顺序与物理提交顺序一致 @@ -334,7 +334,7 @@ START TRANSACTION WITH CAUSAL CONSISTENCY ONLY; 上面的例子中,事务 1 对 `id = 1` 的记录加了锁,事务 2 的事务对 `id = 1` 的记录进行了修改,所以事务 1 和 事务 2 有潜在的因果关系。所以即使用因果一致性开启事务,只要事务 2 在事务 1 提交成功后才提交,逻辑上事务 2 就必定比事务 1 晚发生。因此,不存在某个事务读到了事务 2 对 `id = 1` 记录的修改,但却没有读到事务 1 对 `id = 2` 记录的修改的情况。 -### 无因果关系的事务之间的逻辑顺序与物理提交顺序不一定一致 +### 无因果关系的事务之间的逻辑顺序与物理提交顺序不保证一致 假设 `id = 1` 和 `id = 2` 的记录最初值都为 0,事务 1 和 事务 2 都采用因果一致性,并先后执行如下语句: From 93686581ef9d03cd5a1b63c5ff9bdaf91984ff45 Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Mon, 22 Mar 2021 11:22:27 +0800 Subject: [PATCH 10/21] No version info for master branch Co-authored-by: TomShawn <41534398+TomShawn@users.noreply.github.com> --- transaction-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transaction-overview.md b/transaction-overview.md index 66337fe7f81c..79ffa6aecf03 100644 --- a/transaction-overview.md +++ b/transaction-overview.md @@ -301,7 +301,7 @@ TiDB 中,单个事务的总大小默认不超过 100 MB,这个默认值可 ## 因果一致性事务 -TiDB 从 5.0 版本开始支持开启因果一致性的事务。因果一致性的事务在提交时无需向 PD 获取时间戳,所以提交延迟更低。开启因果一致性事务的语法为: +TiDB 支持开启因果一致性的事务。因果一致性的事务在提交时无需向 PD 获取时间戳,所以提交延迟更低。开启因果一致性事务的语法为: {{< copyable "sql" >}} From a140cb874468e7ff2ffe7691367aaea9d133ca63 Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Mon, 22 Mar 2021 12:06:13 +0800 Subject: [PATCH 11/21] add some system variable changes Signed-off-by: Yilin Chen --- system-variables.md | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/system-variables.md b/system-variables.md index 78cbf5c75e96..610b567c8c54 100644 --- a/system-variables.md +++ b/system-variables.md @@ -376,23 +376,17 @@ mysql> SELECT * FROM t1; > > 目前该特性可能造成事务语义的变化,且与 TiDB Binlog 存在部分不兼容的场景,可以参考[事务语义行为区别](https://github.com/pingcap/tidb/issues/21069)和[与 TiDB Binlog 兼容问题汇总](https://github.com/pingcap/tidb/issues/20996)了解更多关于该特性的使用注意事项。 -### `tidb_enable_async_commit` 从 v5.0.0-rc 版本开始引入 - -> **警告:** -> -> 当前该功能为实验特性,不建议在生产环境中使用。目前存在已知问题有: -> -> + 暂时与 [TiCDC](/ticdc/ticdc-overview.md) 不兼容,可能导致 TiCDC 运行不正常。 -> + 暂时与 [Compaction Filter](/tikv-configuration-file.md#enable-compaction-filter-从-v500-rc-版本开始引入) 不兼容,共同使用时有小概率发生写丢失。 -> + 本特性与 TiDB Binlog 不兼容,开启 TiDB Binlog 时本配置将不生效。 +### `tidb_enable_async_commit` - 作用域:SESSION | GLOBAL -- 默认值:OFF +- 默认值:对新创建的集群,v5.0.0-rc 及以前版本默认为 OFF,自 v5.0.0 GA 版本起默认为 ON。升级不改变该变量的值。 - 该变量控制是否启用 Async Commit 特性,使事务两阶段提交的第二阶段于后台异步进行。开启本特性能降低事务提交的延迟。 -> **警告:** -> -> 开启本特性时,默认不保证事务的外部一致性。具体请参考 [`tidb_guarantee_external_consistency`](#tidb_guarantee_external_consistency-从-v500-rc-版本开始引入) 系统变量。 +### `enable-one-pc` + +- 作用域:SESSION | GLOBAL +- 默认值:对新创建的集群,v5.0.0-rc 及以前版本默认为 OFF,自 v5.0.0 GA 版本起默认为 ON。升级不改变该变量的值。 +- 指定是否在只涉及一个 Region 的事务上使用一阶段提交特性。比起传统两阶段提交,一阶段提交能大幅降低事务提交延迟并提升吞吐。 ### `tidb_enable_cascades_planner` @@ -591,12 +585,6 @@ v5.0.0-rc 后,用户仍可以单独修改以上系统变量(会有废弃警 - `txn_mode`:事务模型。可选值:`OPTIMISTIC`(乐观事务模型),或 `PESSIMISTIC`(悲观事务模型) - `sql`:当前查询对应的 SQL 语句 -### `tidb_guarantee_external_consistency` 从 v5.0.0-rc 版本开始引入 - -- 作用域:SESSION | GLOBAL -- 默认值:OFF -- 该变量控制在开启 Async Commit 特性时,是否需要保证外部一致性。该选项关闭时,如果两个事务修改的内容没有交集,其他事务观测到它们的提交顺序可能与它们实际的提交顺序不一致。在不使用 Async Commit 特性时,无论该选项是否开启,都能保证外部一致性。 - ### `tidb_hash_join_concurrency` > **警告:** From de051eb7a775b4469ea5ab2b6eea22ccc897ef82 Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Mon, 22 Mar 2021 13:33:05 +0800 Subject: [PATCH 12/21] fix lint Signed-off-by: Yilin Chen --- system-variables.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system-variables.md b/system-variables.md index 610b567c8c54..6b16473ef978 100644 --- a/system-variables.md +++ b/system-variables.md @@ -376,13 +376,13 @@ mysql> SELECT * FROM t1; > > 目前该特性可能造成事务语义的变化,且与 TiDB Binlog 存在部分不兼容的场景,可以参考[事务语义行为区别](https://github.com/pingcap/tidb/issues/21069)和[与 TiDB Binlog 兼容问题汇总](https://github.com/pingcap/tidb/issues/20996)了解更多关于该特性的使用注意事项。 -### `tidb_enable_async_commit` +### `tidb_enable_async_commit` 从 v5.0.0-rc 版本开始引入 - 作用域:SESSION | GLOBAL - 默认值:对新创建的集群,v5.0.0-rc 及以前版本默认为 OFF,自 v5.0.0 GA 版本起默认为 ON。升级不改变该变量的值。 - 该变量控制是否启用 Async Commit 特性,使事务两阶段提交的第二阶段于后台异步进行。开启本特性能降低事务提交的延迟。 -### `enable-one-pc` +### `enable-one-pc` 从 v5.0.0-rc 版本开始引入 - 作用域:SESSION | GLOBAL - 默认值:对新创建的集群,v5.0.0-rc 及以前版本默认为 OFF,自 v5.0.0 GA 版本起默认为 ON。升级不改变该变量的值。 From 382df3b808461f212bc7428e89620514bfe7bbbb Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Mon, 22 Mar 2021 13:38:11 +0800 Subject: [PATCH 13/21] clarify upgraded cluster settings Signed-off-by: Yilin Chen --- system-variables.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system-variables.md b/system-variables.md index 6b16473ef978..f7240d234f21 100644 --- a/system-variables.md +++ b/system-variables.md @@ -379,13 +379,13 @@ mysql> SELECT * FROM t1; ### `tidb_enable_async_commit` 从 v5.0.0-rc 版本开始引入 - 作用域:SESSION | GLOBAL -- 默认值:对新创建的集群,v5.0.0-rc 及以前版本默认为 OFF,自 v5.0.0 GA 版本起默认为 ON。升级不改变该变量的值。 +- 默认值:对新创建的集群,v5.0.0-rc 默认值为 OFF,自 v5.0.0 GA 版本起默认值为 ON。对于升级到 v5.0.0 GA 版本的集群,如果原来为 v5.0.0-rc 版本,升级不改变该变量的值;如果原来是 v4.0 及之前版本,默认值为 OFF。 - 该变量控制是否启用 Async Commit 特性,使事务两阶段提交的第二阶段于后台异步进行。开启本特性能降低事务提交的延迟。 ### `enable-one-pc` 从 v5.0.0-rc 版本开始引入 - 作用域:SESSION | GLOBAL -- 默认值:对新创建的集群,v5.0.0-rc 及以前版本默认为 OFF,自 v5.0.0 GA 版本起默认为 ON。升级不改变该变量的值。 +- 默认值:对新创建的集群,v5.0.0-rc 默认值为 OFF,自 v5.0.0 GA 版本起默认值为 ON。对于升级到 v5.0.0 GA 版本的集群,如果原来为 v5.0.0-rc 版本,升级不改变该变量的值;如果原来是 v4.0 及之前版本,默认值为 OFF。 - 指定是否在只涉及一个 Region 的事务上使用一阶段提交特性。比起传统两阶段提交,一阶段提交能大幅降低事务提交延迟并提升吞吐。 ### `tidb_enable_cascades_planner` From ece9787573bbbfd80efa9126686e437b7ea9ea6e Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Mon, 22 Mar 2021 14:16:34 +0800 Subject: [PATCH 14/21] Improve wording Co-authored-by: Grace Cai --- system-variables.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/system-variables.md b/system-variables.md index f7240d234f21..eb1585a1803d 100644 --- a/system-variables.md +++ b/system-variables.md @@ -379,14 +379,14 @@ mysql> SELECT * FROM t1; ### `tidb_enable_async_commit` 从 v5.0.0-rc 版本开始引入 - 作用域:SESSION | GLOBAL -- 默认值:对新创建的集群,v5.0.0-rc 默认值为 OFF,自 v5.0.0 GA 版本起默认值为 ON。对于升级到 v5.0.0 GA 版本的集群,如果原来为 v5.0.0-rc 版本,升级不改变该变量的值;如果原来是 v4.0 及之前版本,默认值为 OFF。 +- 默认值:对于新创建的集群,v5.0.0-rc 版本默认值为 OFF,自 v5.0.0 GA 版本起默认值为 ON。对于升级到 v5.0.0 GA 版本的集群,如果升级前是 v5.0.0-rc 版本,升级不改变该变量的值;如果升级前是 v4.0 及之前版本,升级后默认值为 OFF。 - 该变量控制是否启用 Async Commit 特性,使事务两阶段提交的第二阶段于后台异步进行。开启本特性能降低事务提交的延迟。 ### `enable-one-pc` 从 v5.0.0-rc 版本开始引入 - 作用域:SESSION | GLOBAL -- 默认值:对新创建的集群,v5.0.0-rc 默认值为 OFF,自 v5.0.0 GA 版本起默认值为 ON。对于升级到 v5.0.0 GA 版本的集群,如果原来为 v5.0.0-rc 版本,升级不改变该变量的值;如果原来是 v4.0 及之前版本,默认值为 OFF。 -- 指定是否在只涉及一个 Region 的事务上使用一阶段提交特性。比起传统两阶段提交,一阶段提交能大幅降低事务提交延迟并提升吞吐。 +- 默认值:对于新创建的集群,v5.0.0-rc 版本默认值为 OFF,自 v5.0.0 GA 版本起默认值为 ON。对于升级到 v5.0.0 GA 版本的集群,如果升级前是 v5.0.0-rc 版本,升级不改变该变量的值;如果升级前是 v4.0 及之前版本,升级后默认值为 OFF。 +- 指定是否在只涉及一个 Region 的事务上启用一阶段提交特性。比起传统两阶段提交,一阶段提交能大幅降低事务提交延迟并提升吞吐。 ### `tidb_enable_cascades_planner` From ae7d8ec2d9d5f4d9f8f0afffcd2c431a88dae64e Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Tue, 23 Mar 2021 17:13:29 +0800 Subject: [PATCH 15/21] Apply suggestions from code review Co-authored-by: Grace Cai Co-authored-by: TomShawn <41534398+TomShawn@users.noreply.github.com> --- system-variables.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system-variables.md b/system-variables.md index eb1585a1803d..ab8a7ac690ce 100644 --- a/system-variables.md +++ b/system-variables.md @@ -379,13 +379,13 @@ mysql> SELECT * FROM t1; ### `tidb_enable_async_commit` 从 v5.0.0-rc 版本开始引入 - 作用域:SESSION | GLOBAL -- 默认值:对于新创建的集群,v5.0.0-rc 版本默认值为 OFF,自 v5.0.0 GA 版本起默认值为 ON。对于升级到 v5.0.0 GA 版本的集群,如果升级前是 v5.0.0-rc 版本,升级不改变该变量的值;如果升级前是 v4.0 及之前版本,升级后默认值为 OFF。 +- 默认值:对于新创建的集群,v5.0 RC 版本默认值为 OFF,自 v5.0 GA 版本起默认值为 ON。对于升级到 v5.0 GA 版本的集群,如果升级前是 v5.0 RC 版本,升级不改变该变量的值;如果升级前是 v4.0 及之前版本,升级后默认值为 OFF。 - 该变量控制是否启用 Async Commit 特性,使事务两阶段提交的第二阶段于后台异步进行。开启本特性能降低事务提交的延迟。 ### `enable-one-pc` 从 v5.0.0-rc 版本开始引入 - 作用域:SESSION | GLOBAL -- 默认值:对于新创建的集群,v5.0.0-rc 版本默认值为 OFF,自 v5.0.0 GA 版本起默认值为 ON。对于升级到 v5.0.0 GA 版本的集群,如果升级前是 v5.0.0-rc 版本,升级不改变该变量的值;如果升级前是 v4.0 及之前版本,升级后默认值为 OFF。 +- 默认值:对于新创建的集群,默认值为 ON。对于升级版本的集群,如果升级前是 v5.0 RC 及之后版本,升级不改变该变量的值;如果升级前是 v4.0 及之前版本,升级后默认值为 OFF。 - 指定是否在只涉及一个 Region 的事务上启用一阶段提交特性。比起传统两阶段提交,一阶段提交能大幅降低事务提交延迟并提升吞吐。 ### `tidb_enable_cascades_planner` From c168662dadeec77db5e36806ea745ae095219dde Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Tue, 23 Mar 2021 17:20:11 +0800 Subject: [PATCH 16/21] update binlog related doc Signed-off-by: Yilin Chen --- system-variables.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/system-variables.md b/system-variables.md index ab8a7ac690ce..c79bb7b569eb 100644 --- a/system-variables.md +++ b/system-variables.md @@ -382,12 +382,20 @@ mysql> SELECT * FROM t1; - 默认值:对于新创建的集群,v5.0 RC 版本默认值为 OFF,自 v5.0 GA 版本起默认值为 ON。对于升级到 v5.0 GA 版本的集群,如果升级前是 v5.0 RC 版本,升级不改变该变量的值;如果升级前是 v4.0 及之前版本,升级后默认值为 OFF。 - 该变量控制是否启用 Async Commit 特性,使事务两阶段提交的第二阶段于后台异步进行。开启本特性能降低事务提交的延迟。 +> **注意:** +> +> 启用 TiDB Binlog 后,开启该选项无法获得性能提升。如果可能,建议使用 [TiCDC](/ticdc/ticdc-overview.md) 替代。 + ### `enable-one-pc` 从 v5.0.0-rc 版本开始引入 - 作用域:SESSION | GLOBAL - 默认值:对于新创建的集群,默认值为 ON。对于升级版本的集群,如果升级前是 v5.0 RC 及之后版本,升级不改变该变量的值;如果升级前是 v4.0 及之前版本,升级后默认值为 OFF。 - 指定是否在只涉及一个 Region 的事务上启用一阶段提交特性。比起传统两阶段提交,一阶段提交能大幅降低事务提交延迟并提升吞吐。 +> **注意:** +> +> 启用 TiDB Binlog 后,开启该选项无法获得性能提升。如果可能,建议使用 [TiCDC](/ticdc/ticdc-overview.md) 替代。 + ### `tidb_enable_cascades_planner` - 作用域:SESSION | GLOBAL From f1b1386456ecbae5cb6d6e996ea3baf4ef05ada9 Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Tue, 23 Mar 2021 17:33:38 +0800 Subject: [PATCH 17/21] remove version-specific description Signed-off-by: Yilin Chen --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index c79bb7b569eb..fe5793e7631b 100644 --- a/system-variables.md +++ b/system-variables.md @@ -379,7 +379,7 @@ mysql> SELECT * FROM t1; ### `tidb_enable_async_commit` 从 v5.0.0-rc 版本开始引入 - 作用域:SESSION | GLOBAL -- 默认值:对于新创建的集群,v5.0 RC 版本默认值为 OFF,自 v5.0 GA 版本起默认值为 ON。对于升级到 v5.0 GA 版本的集群,如果升级前是 v5.0 RC 版本,升级不改变该变量的值;如果升级前是 v4.0 及之前版本,升级后默认值为 OFF。 +- 默认值:对于新创建的集群,默认值为 ON。对于升级版本的集群,如果升级前是 v5.0 RC 及之后版本,升级不改变该变量的值;如果升级前是 v4.0 及之前版本,升级后默认值为 OFF。 - 该变量控制是否启用 Async Commit 特性,使事务两阶段提交的第二阶段于后台异步进行。开启本特性能降低事务提交的延迟。 > **注意:** From 866a9bdb90f81f0cac9f5a84ba1342fd73f5c1a8 Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Tue, 23 Mar 2021 17:39:51 +0800 Subject: [PATCH 18/21] improve wording Signed-off-by: Yilin Chen --- system-variables.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system-variables.md b/system-variables.md index fe5793e7631b..a260a5446036 100644 --- a/system-variables.md +++ b/system-variables.md @@ -384,7 +384,7 @@ mysql> SELECT * FROM t1; > **注意:** > -> 启用 TiDB Binlog 后,开启该选项无法获得性能提升。如果可能,建议使用 [TiCDC](/ticdc/ticdc-overview.md) 替代。 +> 启用 TiDB Binlog 后,开启该选项无法获得性能提升。要获得性能提升,建议使用 [TiCDC](/ticdc/ticdc-overview.md) 替代 TiDB Binlog。 ### `enable-one-pc` 从 v5.0.0-rc 版本开始引入 @@ -394,7 +394,7 @@ mysql> SELECT * FROM t1; > **注意:** > -> 启用 TiDB Binlog 后,开启该选项无法获得性能提升。如果可能,建议使用 [TiCDC](/ticdc/ticdc-overview.md) 替代。 +> 启用 TiDB Binlog 后,开启该选项无法获得性能提升。要获得性能提升,建议使用 [TiCDC](/ticdc/ticdc-overview.md) 替代 TiDB Binlog。 ### `tidb_enable_cascades_planner` From ab87fa0da95a8b486914fe51a5aafde55d47f235 Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Tue, 23 Mar 2021 18:02:29 +0800 Subject: [PATCH 19/21] some fixes Signed-off-by: Yilin Chen --- system-variables.md | 2 +- transaction-overview.md | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index a260a5446036..fe0d4f2e9721 100644 --- a/system-variables.md +++ b/system-variables.md @@ -386,7 +386,7 @@ mysql> SELECT * FROM t1; > > 启用 TiDB Binlog 后,开启该选项无法获得性能提升。要获得性能提升,建议使用 [TiCDC](/ticdc/ticdc-overview.md) 替代 TiDB Binlog。 -### `enable-one-pc` 从 v5.0.0-rc 版本开始引入 +### `tidb_enable_1pc` 从 v5.0.0-rc 版本开始引入 - 作用域:SESSION | GLOBAL - 默认值:对于新创建的集群,默认值为 ON。对于升级版本的集群,如果升级前是 v5.0 RC 及之后版本,升级不改变该变量的值;如果升级前是 v4.0 及之前版本,升级后默认值为 OFF。 diff --git a/transaction-overview.md b/transaction-overview.md index 79ffa6aecf03..888f9cac080d 100644 --- a/transaction-overview.md +++ b/transaction-overview.md @@ -301,6 +301,10 @@ TiDB 中,单个事务的总大小默认不超过 100 MB,这个默认值可 ## 因果一致性事务 +> **注意:** +> +> 因果一致性事务只在启用 Async Commit 特性和一阶段提交特性时生效。关于这两个特性的启用情况,请参见 [`tidb_enable_async_commit` 系统变量介绍](system-variables#tidb_enable_async_commit-从-v500-rc-版本开始引入)和 [`tidb_enable_1pc` 系统变量介绍](system-variables#tidb_enable_1pc-从-v500-rc-版本开始引入) + TiDB 支持开启因果一致性的事务。因果一致性的事务在提交时无需向 PD 获取时间戳,所以提交延迟更低。开启因果一致性事务的语法为: {{< copyable "sql" >}} From 463051e39fa25ad2d8ba666acf2ad3b9c356b0e5 Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Tue, 23 Mar 2021 18:04:26 +0800 Subject: [PATCH 20/21] fix broken link Signed-off-by: Yilin Chen --- transaction-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transaction-overview.md b/transaction-overview.md index 888f9cac080d..c6c714c04582 100644 --- a/transaction-overview.md +++ b/transaction-overview.md @@ -303,7 +303,7 @@ TiDB 中,单个事务的总大小默认不超过 100 MB,这个默认值可 > **注意:** > -> 因果一致性事务只在启用 Async Commit 特性和一阶段提交特性时生效。关于这两个特性的启用情况,请参见 [`tidb_enable_async_commit` 系统变量介绍](system-variables#tidb_enable_async_commit-从-v500-rc-版本开始引入)和 [`tidb_enable_1pc` 系统变量介绍](system-variables#tidb_enable_1pc-从-v500-rc-版本开始引入) +> 因果一致性事务只在启用 Async Commit 特性和一阶段提交特性时生效。关于这两个特性的启用情况,请参见 [`tidb_enable_async_commit` 系统变量介绍](system-variables.md#tidb_enable_async_commit-从-v500-rc-版本开始引入)和 [`tidb_enable_1pc` 系统变量介绍](system-variables.md#tidb_enable_1pc-从-v500-rc-版本开始引入) TiDB 支持开启因果一致性的事务。因果一致性的事务在提交时无需向 PD 获取时间戳,所以提交延迟更低。开启因果一致性事务的语法为: From c0cc15b6f264f9c31faafa9e6a3ba218eb3fa9d2 Mon Sep 17 00:00:00 2001 From: Yilin Chen Date: Tue, 23 Mar 2021 20:27:25 +0800 Subject: [PATCH 21/21] Update transaction-overview.md Co-authored-by: TomShawn <41534398+TomShawn@users.noreply.github.com> --- transaction-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transaction-overview.md b/transaction-overview.md index c6c714c04582..7822624be34f 100644 --- a/transaction-overview.md +++ b/transaction-overview.md @@ -303,7 +303,7 @@ TiDB 中,单个事务的总大小默认不超过 100 MB,这个默认值可 > **注意:** > -> 因果一致性事务只在启用 Async Commit 特性和一阶段提交特性时生效。关于这两个特性的启用情况,请参见 [`tidb_enable_async_commit` 系统变量介绍](system-variables.md#tidb_enable_async_commit-从-v500-rc-版本开始引入)和 [`tidb_enable_1pc` 系统变量介绍](system-variables.md#tidb_enable_1pc-从-v500-rc-版本开始引入) +> 因果一致性事务只在启用 Async Commit 特性和一阶段提交特性时生效。关于这两个特性的启用情况,请参见 [`tidb_enable_async_commit` 系统变量介绍](/system-variables.md#tidb_enable_async_commit-从-v500-rc-版本开始引入)和 [`tidb_enable_1pc` 系统变量介绍](/system-variables.md#tidb_enable_1pc-从-v500-rc-版本开始引入)。 TiDB 支持开启因果一致性的事务。因果一致性的事务在提交时无需向 PD 获取时间戳,所以提交延迟更低。开启因果一致性事务的语法为: