From c5b40abc4b68bce5d7f4c9c7a4deb5ace48c1636 Mon Sep 17 00:00:00 2001 From: houfaxin Date: Tue, 24 Dec 2024 08:59:16 +0800 Subject: [PATCH 1/4] Update tidb-functions.md --- functions-and-operators/tidb-functions.md | 119 +++++++++++++++++++++- 1 file changed, 118 insertions(+), 1 deletion(-) diff --git a/functions-and-operators/tidb-functions.md b/functions-and-operators/tidb-functions.md index 8ff820badc69..e75f27ab3080 100644 --- a/functions-and-operators/tidb-functions.md +++ b/functions-and-operators/tidb-functions.md @@ -16,8 +16,11 @@ summary: 学习使用 TiDB 特有的函数。 | [`TIDB_DECODE_KEY()`](#tidb_decode_key) | 用于将 TiDB 编码的键输入解码为包含 `_tidb_rowid` 和 `table_id` 的 JSON 结构。一些系统表和日志输出中有 TiDB 编码的键。 | | [`TIDB_DECODE_PLAN()`](#tidb_decode_plan) | 用于解码 TiDB 执行计划。 | | [`TIDB_DECODE_SQL_DIGESTS()`](#tidb_decode_sql_digests) | 用于在集群中查询一组 SQL digest 所对应的 SQL 语句的归一化形式(即去除格式和参数后的形式)。 | +| [`TIDB_ENCODE_INDEX_KEY()`](#tidb_encode_index_key) | 对索引键进行编码。 | +| [`TIDB_ENCODE_RECORD_KEY()`](#tidb_encode_record_key) | 对记录键进行编码。 | | [`TIDB_ENCODE_SQL_DIGEST()`](#tidb_encode_sql_digest) | 用于为查询字符串获取 digest。 | | [`TIDB_IS_DDL_OWNER()`](#tidb_is_ddl_owner) | 用于检查你连接的 TiDB 实例是否是 DDL Owner。DDL Owner 是代表集群中所有其他节点执行 DDL 语句的 TiDB 实例。 | +| [`TIDB_MVCC_INFO()`](#tidb_mvcc_info) | 返回关于某个键的多版本并发控制 (Multi-Version Concurrency Control, MVCC) 信息。 | | [`TIDB_PARSE_TSO()`](#tidb_parse_tso) | 用于从 TiDB TSO 时间戳中提取物理时间戳。参见 [`tidb_current_ts`](/system-variables.md#tidb_current_ts)。 | | [`TIDB_PARSE_TSO_LOGICAL()`](#tidb_parse_tso_logical) | 用于从 TiDB TSO 时间戳中提取逻辑时间戳。| | [`TIDB_ROW_CHECKSUM()`](#tidb_row_checksum) | 用于查询行数据的 Checksum 值。该函数只能用于 FastPlan 流程的 `SELECT` 语句,即你可通过类似 `SELECT TIDB_ROW_CHECKSUM() FROM t WHERE id = ?` 或 `SELECT TIDB_ROW_CHECKSUM() FROM t WHERE id IN (?, ?, ...)` 的语句进行查询。参见[数据正确性校验](/ticdc/ticdc-integrity-check.md)。 | @@ -547,4 +550,118 @@ SELECT VITESS_HASH(123); | 1155070131015363447 | +---------------------+ 1 row in set (0.00 sec) -``` \ No newline at end of file +``` + +## TIDB_ENCODE_INDEX_KEY + +对索引键进行编码。 + +```sql +CREATE TABLE t(id int PRIMARY KEY, a int, KEY `idx` (a)); +``` + +``` +Query OK, 0 rows affected (0.00 sec) +``` + +```sql +INSERT INTO t VALUES(1,1); +``` + +``` +Query OK, 1 row affected (0.00 sec) +``` + +```sql +SELECT TIDB_ENCODE_INDEX_KEY('test', 't', 'idx', 1, 1); +``` + +``` ++----------------------------------------------------------------------------+ +| TIDB_ENCODE_INDEX_KEY('test', 't', 'idx', 1, 1) | ++----------------------------------------------------------------------------+ +| 74800000000000007f5f698000000000000001038000000000000001038000000000000001 | ++----------------------------------------------------------------------------+ +1 row in set (0.00 sec) +``` + +## TIDB_ENCODE_RECORD_KEY + +对记录键进行编码。 + +```sql +CREATE TABLE t(id int PRIMARY KEY, a int, KEY `idx` (a)); +``` + +``` +Query OK, 0 rows affected (0.00 sec) +``` + +```sql +INSERT INTO t VALUES(1,1); +``` + +``` +Query OK, 1 row affected (0.00 sec) +``` + +```sql +SELECT TIDB_ENCODE_RECORD_KEY('test', 't', 1); +``` + +``` ++----------------------------------------+ +| TIDB_ENCODE_RECORD_KEY('test', 't', 1) | ++----------------------------------------+ +| 7480000000000000845f728000000000000001 | ++----------------------------------------+ +1 row in set (0.00 sec) +``` + +```sql +SELECT TIDB_DECODE_KEY('7480000000000000845f728000000000000001'); +``` + +``` ++-----------------------------------------------------------+ +| TIDB_DECODE_KEY('7480000000000000845f728000000000000001') | ++-----------------------------------------------------------+ +| {"id":1,"table_id":"132"} | ++-----------------------------------------------------------+ +1 row in set (0.00 sec) +``` + +## TIDB_MVCC_INFO + +返回关于某个键的多版本并发控制 (Multi-Version Concurrency Control, MVCC) 信息。你可以使用 [`TIDB_ENCODE_INDEX_KEY`](#TIDB_ENCODE_INDEX_KEY) 函数获取键。 + +```sql +SELECT JSON_PRETTY(TIDB_MVCC_INFO('74800000000000007f5f698000000000000001038000000000000001038000000000000001')) AS info\G +``` + +``` +*************************** 1. row *************************** +info: [ + { + "key": "74800000000000007f5f698000000000000001038000000000000001038000000000000001", + "mvcc": { + "info": { + "values": [ + { + "start_ts": 454654803134119936, + "value": "MA==" + } + ], + "writes": [ + { + "commit_ts": 454654803134119937, + "short_value": "MA==", + "start_ts": 454654803134119936 + } + ] + } + } + } +] +1 row in set (0.00 sec) +``` From 1461678ba8ae8c12e74204b57be9762df1878ee7 Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Mon, 30 Dec 2024 11:24:38 +0800 Subject: [PATCH 2/4] Apply suggestions from code review --- functions-and-operators/tidb-functions.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/functions-and-operators/tidb-functions.md b/functions-and-operators/tidb-functions.md index e75f27ab3080..a7b641418d49 100644 --- a/functions-and-operators/tidb-functions.md +++ b/functions-and-operators/tidb-functions.md @@ -20,7 +20,7 @@ summary: 学习使用 TiDB 特有的函数。 | [`TIDB_ENCODE_RECORD_KEY()`](#tidb_encode_record_key) | 对记录键进行编码。 | | [`TIDB_ENCODE_SQL_DIGEST()`](#tidb_encode_sql_digest) | 用于为查询字符串获取 digest。 | | [`TIDB_IS_DDL_OWNER()`](#tidb_is_ddl_owner) | 用于检查你连接的 TiDB 实例是否是 DDL Owner。DDL Owner 是代表集群中所有其他节点执行 DDL 语句的 TiDB 实例。 | -| [`TIDB_MVCC_INFO()`](#tidb_mvcc_info) | 返回关于某个键的多版本并发控制 (Multi-Version Concurrency Control, MVCC) 信息。 | +| [`TIDB_MVCC_INFO()`](#tidb_mvcc_info) | 返回关于某个键的多版本并发控制 ([Multi-Version Concurrency Control, MVCC](/glossary.md#multi-version-concurrency-control-mvcc)) 信息。 | | [`TIDB_PARSE_TSO()`](#tidb_parse_tso) | 用于从 TiDB TSO 时间戳中提取物理时间戳。参见 [`tidb_current_ts`](/system-variables.md#tidb_current_ts)。 | | [`TIDB_PARSE_TSO_LOGICAL()`](#tidb_parse_tso_logical) | 用于从 TiDB TSO 时间戳中提取逻辑时间戳。| | [`TIDB_ROW_CHECKSUM()`](#tidb_row_checksum) | 用于查询行数据的 Checksum 值。该函数只能用于 FastPlan 流程的 `SELECT` 语句,即你可通过类似 `SELECT TIDB_ROW_CHECKSUM() FROM t WHERE id = ?` 或 `SELECT TIDB_ROW_CHECKSUM() FROM t WHERE id IN (?, ?, ...)` 的语句进行查询。参见[数据正确性校验](/ticdc/ticdc-integrity-check.md)。 | @@ -633,7 +633,7 @@ SELECT TIDB_DECODE_KEY('7480000000000000845f728000000000000001'); ## TIDB_MVCC_INFO -返回关于某个键的多版本并发控制 (Multi-Version Concurrency Control, MVCC) 信息。你可以使用 [`TIDB_ENCODE_INDEX_KEY`](#TIDB_ENCODE_INDEX_KEY) 函数获取键。 +返回关于某个键的多版本并发控制 ([Multi-Version Concurrency Control, MVCC](/glossary.md#multi-version-concurrency-control-mvcc)) 信息。你可以使用 [`TIDB_ENCODE_INDEX_KEY`](#TIDB_ENCODE_INDEX_KEY) 函数获取键。 ```sql SELECT JSON_PRETTY(TIDB_MVCC_INFO('74800000000000007f5f698000000000000001038000000000000001038000000000000001')) AS info\G From 843e1a7147849d9e076ea4217f5d260fa1d9ef2b Mon Sep 17 00:00:00 2001 From: houfaxin Date: Mon, 30 Dec 2024 11:28:28 +0800 Subject: [PATCH 3/4] add mvcc in glossary --- glossary.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/glossary.md b/glossary.md index a7cca1ab7e7e..b377ab16b454 100644 --- a/glossary.md +++ b/glossary.md @@ -157,6 +157,10 @@ TiDB 会在开发里程碑版本 (Development Milestone Release, DMR) 中引入 从 v5.0 起,TiDB 通过 TiFlash 节点引入了 Massively Parallel Processing (MPP) 架构。这使得大型表连接类查询可以由不同 TiFlash 节点共同分担完成。当 MPP 模式开启后,TiDB 将会根据代价决定是否应该交由 MPP 框架进行计算。MPP 模式下,表连接将通过对 JOIN Key 进行数据计算时重分布(Exchange 操作)的方式把计算压力分摊到各个 TiFlash 执行节点,从而达到加速计算的目的。更多信息请参见[使用 MPP 模式](/tiflash/use-tiflash-mpp-mode.md)。 +### Multi-version concurrency control (MVCC) + +[MVCC](https://en.wikipedia.org/wiki/Multiversion_concurrency_control)(多版本并发控制)是 TiDB 和其他数据库中的一种并发控制机制。它处理事务的内存读取,以实现对 TiDB 的并发访问,从而避免由并发读写冲突引起的阻塞。 + ## O ### Old value From e96a1f398b811f17acd74705469bba85d0dd4d1b Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Mon, 6 Jan 2025 10:24:00 +0800 Subject: [PATCH 4/4] Apply suggestions from code review Co-authored-by: Grace Cai --- functions-and-operators/tidb-functions.md | 2 +- glossary.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/functions-and-operators/tidb-functions.md b/functions-and-operators/tidb-functions.md index a7b641418d49..1dfb551cf85c 100644 --- a/functions-and-operators/tidb-functions.md +++ b/functions-and-operators/tidb-functions.md @@ -633,7 +633,7 @@ SELECT TIDB_DECODE_KEY('7480000000000000845f728000000000000001'); ## TIDB_MVCC_INFO -返回关于某个键的多版本并发控制 ([Multi-Version Concurrency Control, MVCC](/glossary.md#multi-version-concurrency-control-mvcc)) 信息。你可以使用 [`TIDB_ENCODE_INDEX_KEY`](#TIDB_ENCODE_INDEX_KEY) 函数获取键。 +返回关于某个键的多版本并发控制 ([Multi-Version Concurrency Control, MVCC](/glossary.md#multi-version-concurrency-control-mvcc)) 信息。你可以使用 [`TIDB_ENCODE_INDEX_KEY`](#tidb_encode_index_key) 函数获取键。 ```sql SELECT JSON_PRETTY(TIDB_MVCC_INFO('74800000000000007f5f698000000000000001038000000000000001038000000000000001')) AS info\G diff --git a/glossary.md b/glossary.md index b377ab16b454..e8aba33054bd 100644 --- a/glossary.md +++ b/glossary.md @@ -159,7 +159,7 @@ TiDB 会在开发里程碑版本 (Development Milestone Release, DMR) 中引入 ### Multi-version concurrency control (MVCC) -[MVCC](https://en.wikipedia.org/wiki/Multiversion_concurrency_control)(多版本并发控制)是 TiDB 和其他数据库中的一种并发控制机制。它处理事务的内存读取,以实现对 TiDB 的并发访问,从而避免由并发读写冲突引起的阻塞。 +[MVCC](https://zh.wikipedia.org/wiki/多版本并发控制)(多版本并发控制)是 TiDB 和其他数据库中的一种并发控制机制。它处理事务的内存读取,以实现对 TiDB 的并发访问,从而避免由并发读写冲突引起的阻塞。 ## O