diff --git a/TOC.md b/TOC.md index 1273035aa1c0..75f8812980bd 100644 --- a/TOC.md +++ b/TOC.md @@ -659,7 +659,7 @@ - [`METRICS_SUMMARY`](/information-schema/information-schema-metrics-summary.md) - [`METRICS_TABLES`](/information-schema/information-schema-metrics-tables.md) - [`PARTITIONS`](/information-schema/information-schema-partitions.md) - - [`PLACEMENT_RULES`](/information-schema/information-schema-placement-rules.md) + - [`PLACEMENT_POLICIES`](/information-schema/information-schema-placement-policies.md) - [`PROCESSLIST`](/information-schema/information-schema-processlist.md) - [`REFERENTIAL_CONSTRAINTS`](/information-schema/information-schema-referential-constraints.md) - [`SCHEMATA`](/information-schema/information-schema-schemata.md) diff --git a/br/backup-and-restore-tool.md b/br/backup-and-restore-tool.md index a82db5eeeb33..d63f0cff005f 100644 --- a/br/backup-and-restore-tool.md +++ b/br/backup-and-restore-tool.md @@ -63,11 +63,13 @@ SST 文件以 `storeID_regionID_regionEpoch_keyHash_cf` 的格式命名。格式 ### 兼容性 -BR 和 TiDB 集群的兼容性问题分为以下两方面: +BR 和 TiDB 集群的兼容性问题有以下几方面: + BR 部分版本和 TiDB 集群的接口不兼容 - BR 在 v5.4.0 之前不支持恢复 `charset=GBK` 的表。并且,任何版本的 BR 都不支持恢复 `charset=GBK` 的表到 5.4.0 之前的 TiDB 集群。 + + BR 在 v5.4.0 之前不支持恢复 `charset=GBK` 的表。并且,任何版本的 BR 都不支持恢复 `charset=GBK` 的表到 5.4.0 之前的 TiDB 集群。 + + + BR 在 v6.0.0 之前不支持[放置规则](/placement-rules-in-sql.md)。 BR v6.0.0 及以上版本开始支持并提供了命令行选项 `--with-tidb-placement-mode=strict/ignore` 来控制放置规则的导入模式。 默认值为 `strict` 代表导入并检查放置规则,否则当其设置为 `ignore` 时忽略所有的放置规则。 + 某些功能在开启或关闭状态下,会导致 KV 格式发生变化,因此备份和恢复期间如果没有统一开启或关闭,就会带来不兼容的问题 diff --git a/information-schema/information-schema-placement-policies.md b/information-schema/information-schema-placement-policies.md new file mode 100644 index 000000000000..4eb42f3b45d3 --- /dev/null +++ b/information-schema/information-schema-placement-policies.md @@ -0,0 +1,73 @@ +--- +title: PLACEMENT_POLICIES +summary: 了解 information_schema 表 `PLACEMENT_POLICIES`。 +aliases: ['/zh/tidb/dev/information-schema-placement-rules'] +--- + +# PLACEMENT_POLICIES + +`PLACEMENT_POLICIES` 表展示所有放置策略 (placement policy) 的信息,见 [Placement Rules in SQL](/placement-rules-in-sql.md)。 + +{{< copyable "sql" >}} + +```sql +USE information_schema; +DESC placement_policies; +``` + +```sql ++----------------------+---------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++----------------------+---------------+------+-----+---------+-------+ +| POLICY_ID | bigint(64) | NO | | | | +| CATALOG_NAME | varchar(512) | NO | | | | +| POLICY_NAME | varchar(64) | NO | | | | +| PRIMARY_REGION | varchar(1024) | YES | | | | +| REGIONS | varchar(1024) | YES | | | | +| CONSTRAINTS | varchar(1024) | YES | | | | +| LEADER_CONSTRAINTS | varchar(1024) | YES | | | | +| FOLLOWER_CONSTRAINTS | varchar(1024) | YES | | | | +| LEARNER_CONSTRAINTS | varchar(1024) | YES | | | | +| SCHEDULE | varchar(20) | YES | | | | +| FOLLOWERS | bigint(64) | YES | | | | +| LEARNERS | bigint(64) | YES | | | | ++----------------------+---------------+------+-----+---------+-------+ +12 rows in set (0.00 sec) +``` + +## 示例 + +`PLACEMENT_POLICIES` 表只展示放置策略 (placement policy) 的信息。如需查看所有信息的规范版本(放置策略,以及绑定放置策略的对象),请改用 `SHOW PLACEMENT` 语句: + +{{< copyable "sql" >}} + +```sql +CREATE TABLE t1 (a INT); +CREATE PLACEMENT POLICY p1 primary_region="us-east-1" regions="us-east-1"; +CREATE TABLE t3 (a INT) PLACEMENT POLICY=p1; +SHOW PLACEMENT; -- 显示所有信息,包含 t3。 +SELECT * FROM information_schema.placement_policies; -- 只显示放置策略,不包含 t3。 +``` + +```sql +Query OK, 0 rows affected (0.09 sec) + +Query OK, 0 rows affected (0.11 sec) + +Query OK, 0 rows affected (0.08 sec) + ++---------------+------------------------------------------------+------------------+ +| Target | Placement | Scheduling_State | ++---------------+------------------------------------------------+------------------+ +| POLICY p1 | PRIMARY_REGION="us-east-1" REGIONS="us-east-1" | NULL | +| TABLE test.t3 | PRIMARY_REGION="us-east-1" REGIONS="us-east-1" | SCHEDULED | ++---------------+------------------------------------------------+------------------+ +2 rows in set (0.00 sec) + ++-----------+--------------+-------------+----------------+-----------+-------------+--------------------+----------------------+---------------------+----------+-----------+----------+ +| POLICY_ID | CATALOG_NAME | POLICY_NAME | PRIMARY_REGION | REGIONS | CONSTRAINTS | LEADER_CONSTRAINTS | FOLLOWER_CONSTRAINTS | LEARNER_CONSTRAINTS | SCHEDULE | FOLLOWERS | LEARNERS | ++-----------+--------------+-------------+----------------+-----------+-------------+--------------------+----------------------+---------------------+----------+-----------+----------+ +| 1 | def | p1 | us-east-1 | us-east-1 | | | | | | 2 | 0 | ++-----------+--------------+-------------+----------------+-----------+-------------+--------------------+----------------------+---------------------+----------+-----------+----------+ +1 rows in set (0.00 sec) +``` diff --git a/information-schema/information-schema-placement-rules.md b/information-schema/information-schema-placement-rules.md deleted file mode 100644 index e23b0460100b..000000000000 --- a/information-schema/information-schema-placement-rules.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: PLACEMENT_RULES -summary: 了解 information_schema 表 `PLACEMENT_RULES`。 ---- - -# PLACEMENT_RULES - -`PLACEMENT_RULES` 表展示所有已显式配置的 [Placement Rules in SQL](/placement-rules-in-sql.md) 信息,即所有放置策略 (placement policy) 的信息。 - -{{< copyable "sql" >}} - -```sql -USE information_schema; -DESC placement_rules; -``` - -```sql -+----------------------+--------------+------+------+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+----------------------+--------------+------+------+---------+-------+ -| POLICY_ID | bigint(64) | NO | | NULL | | -| CATALOG_NAME | varchar(512) | NO | | NULL | | -| POLICY_NAME | varchar(5) | YES | | NULL | | -| SCHEMA_NAME | varchar(5) | YES | | NULL | | -| TABLE_NAME | varchar(5) | YES | | NULL | | -| PARTITION_NAME | varchar(5) | YES | | NULL | | -| PRIMARY_REGION | varchar(5) | NO | | NULL | | -| REGIONS | varchar(5) | NO | | NULL | | -| CONSTRAINTS | varchar(5) | NO | | NULL | | -| LEADER_CONSTRAINTS | varchar(5) | NO | | NULL | | -| FOLLOWER_CONSTRAINTS | varchar(5) | NO | | NULL | | -| LEARNER_CONSTRAINTS | varchar(5) | NO | | NULL | | -| SCHEDULE | varchar(20) | NO | | NULL | | -| FOLLOWERS | bigint(64) | NO | | NULL | | -| LEARNERS | bigint(64) | NO | | NULL | | -+----------------------+--------------+------+------+---------+-------+ -15 rows in set (0.00 sec) -``` - -## 示例 - -`PLACEMENT_RULES` 表只展示已显式配置的规则。如要查看 Placement Rules 放置规则的规范版本(包括绑定了对象的放置策略),请改用 `SHOW PLACEMENT` 语句: - -{{< copyable "sql" >}} - -```sql -CREATE TABLE t1 (a INT); -CREATE PLACEMENT POLICY p1 primary_region="us-east-1" regions="us-east-1"; -CREATE TABLE t2 (a INT) PLACEMENT POLICY=p1; -SHOW PLACEMENT; -- 包含 t2。 -SELECT * FROM information_schema.placement_rules; -- 不包含 t2。 -``` - -```sql -Query OK, 0 rows affected (0.09 sec) - -Query OK, 0 rows affected (0.11 sec) - -Query OK, 0 rows affected (0.08 sec) - -Query OK, 0 rows affected (0.11 sec) - -+---------------+------------------------------------------------+ -| Target | Placement | -+---------------+------------------------------------------------+ -| POLICY p1 | PRIMARY_REGION="us-east-1" REGIONS="us-east-1" | -| TABLE test.t2 | PRIMARY_REGION="us-east-1" REGIONS="us-east-1" | -+---------------+------------------------------------------------+ -2 rows in set (0.00 sec) - -+-----------+--------------+-------------+-------------+------------+----------------+----------------+-----------+-------------+--------------------+----------------------+---------------------+----------+-----------+----------+ -| POLICY_ID | CATALOG_NAME | POLICY_NAME | SCHEMA_NAME | TABLE_NAME | PARTITION_NAME | PRIMARY_REGION | REGIONS | CONSTRAINTS | LEADER_CONSTRAINTS | FOLLOWER_CONSTRAINTS | LEARNER_CONSTRAINTS | SCHEDULE | FOLLOWERS | LEARNERS | -+-----------+--------------+-------------+-------------+------------+----------------+----------------+-----------+-------------+--------------------+----------------------+---------------------+----------+-----------+----------+ -| 3 | def | p1 | NULL | NULL | NULL | us-east-1 | us-east-1 | | | | | | 0 | 0 | -+-----------+--------------+-------------+-------------+------------+----------------+----------------+-----------+-------------+--------------------+----------------------+---------------------+----------+-----------+----------+ -2 rows in set (0.00 sec) -``` diff --git a/information-schema/information-schema.md b/information-schema/information-schema.md index 1d023a09a5e2..9df5a39c0f79 100644 --- a/information-schema/information-schema.md +++ b/information-schema/information-schema.md @@ -75,7 +75,7 @@ Information Schema 提供了一种查看系统元数据的 ANSI 标准方法。 | [`METRICS_SUMMARY`](/information-schema/information-schema-metrics-summary.md) | 从 Prometheus 获取的指标的摘要。 | | `METRICS_SUMMARY_BY_LABEL` | 参见 `METRICS_SUMMARY` 表。 | | [`METRICS_TABLES`](/information-schema/information-schema-metrics-tables.md) | 为 `METRICS_SCHEMA` 中的表提供 PromQL 定义。 | -| [`PLACEMENT_RULES`](/information-schema/information-schema-placement-rules.md) | 对于所有被显式分配了放置规则的对象,该扩展表提供与这些对象相关的所有信息。 | +| [`PLACEMENT_POLICIES`](/information-schema/information-schema-placement-policies.md) | 提供所有放置策略的定义信息。 | | [`SEQUENCES`](/information-schema/information-schema-sequences.md) | 描述了基于 MariaDB 实现的 TiDB 序列。 | | [`SLOW_QUERY`](/information-schema/information-schema-slow-query.md) | 提供当前 TiDB 服务器上慢查询的信息。 | | [`STATEMENTS_SUMMARY`](/statement-summary-tables.md) | 类似于 MySQL 中的 performance_schema 语句摘要。 | diff --git a/placement-rules-in-sql.md b/placement-rules-in-sql.md index d7f4f90f134f..23344d0d938d 100644 --- a/placement-rules-in-sql.md +++ b/placement-rules-in-sql.md @@ -25,7 +25,7 @@ Placement Rules in SQL 特性用于通过 SQL 接口配置数据在 TiKV 集群 ## 指定放置规则 -指定放置规则,首先需要创建放置策略 (placement policy)。 +指定放置规则,首先需要通过 [`CREATE PLACEMENT POLICY`](/sql-statements/sql-statement-create-placement-policy.md) 语句创建**放置策略 (placement policy)**。 ```sql CREATE PLACEMENT POLICY myplacementpolicy PRIMARY_REGION="us-east-1" REGIONS="us-east-1,us-west-1"; @@ -34,16 +34,28 @@ CREATE PLACEMENT POLICY myplacementpolicy PRIMARY_REGION="us-east-1" REGIONS="us 然后可以使用 `CREATE TABLE` 或者 `ALTER TABLE` 将规则绑定至表或分区表,这样就在表或分区上指定了放置规则: ```sql -CREATE TABLE t1 (a INT) PLACEMENT POLICY myplacementpolicy; +CREATE TABLE t1 (a INT) PLACEMENT POLICY=myplacementpolicy; CREATE TABLE t2 (a INT); -ALTER TABLE t2 PLACEMENT POLICY myplacementpolicy; +ALTER TABLE t2 PLACEMENT POLICY=myplacementpolicy; ``` `PLACEMENT POLICY` 为全局作用域,不与任何数据库表结构相关联。因此,通过 `CREATE TABLE` 指定放置规则时,无需任何额外的权限。 +要修改放置策略,你可以使用 [`ALTER PLACEMENT POLICY`](/sql-statements/sql-statement-alter-placement-policy.md) 语句。修改将传播到所有绑定此放置策略的对象。 + +```sql +ALTER PLACEMENT POLICY myplacementpolicy FOLLOWERS=5; +``` + +要删除没有绑定任何分区或表的放置策略,你可以使用 [`DROP PLACEMENT POLICY`](/sql-statements/sql-statement-drop-placement-policy.md): + +```sql +DROP PLACEMENT POLICY myplacementpolicy; +``` + ## 查看放置规则 -如果一张表绑定了放置规则,你可以用 `SHOW CREATE TABLE` 来查看。还可以用 `SHOW CREATE PLACEMENT POLICY` 来查看已经创建的规则。 +如果一张表绑定了放置规则,你可以用 [`SHOW CREATE TABLE`](/sql-statements/sql-statement-show-create-table.md) 来查看。还可以用 [`SHOW CREATE PLACEMENT POLICY`](/sql-statements/sql-statement-show-create-placement-policy.md) 来查看已经创建的放置策略。 ```sql tidb> SHOW CREATE TABLE t1\G @@ -60,6 +72,26 @@ Create Policy: CREATE PLACEMENT POLICY myplacementpolicy PRIMARY_REGION="us-east 1 row in set (0.00 sec) ``` +你也可以用 [`INFORMATION_SCHEMA.PLACEMENT_POLICIES`](/information-schema/information-schema-placement-policies.md) 系统表查看所有放置策略的定义。 + +```sql +tidb> select * from information_schema.placement_policies\G +***************************[ 1. row ]*************************** +POLICY_ID | 1 +CATALOG_NAME | def +POLICY_NAME | p1 +PRIMARY_REGION | us-east-1 +REGIONS | us-east-1,us-west-1 +CONSTRAINTS | +LEADER_CONSTRAINTS | +FOLLOWER_CONSTRAINTS | +LEARNER_CONSTRAINTS | +SCHEDULE | +FOLLOWERS | 4 +LEARNERS | 0 +1 row in set +``` + `information_schema.tables` 表和 `information_schema.partitions` 表也有一列 `tidb_placement_policy_name`,用于展示所有绑定了放置规则的对象: ```sql @@ -98,8 +130,11 @@ SELECT * FROM information_schema.partitions WHERE tidb_placement_policy_name IS | 选项名 | 描述 | |----------------------------|------------------------------------------------------------------------------------------------| -| `CONSTRAINTS` | 适用于所有角色 (role) 的约束列表。例如,`CONSTRAINTS="[+disk=ssd]`。 | -| `FOLLOWER_CONSTRAINTS` | 仅适用于 follower 的约束列表。 | +| `CONSTRAINTS` | 适用于所有角色 (role) 的约束列表。例如,`CONSTRAINTS="[+disk=ssd]`。 | +| `LEADER_CONSTRAINTS` | 仅适用于 leader 的约束列表。 | +| `FOLLOWER_CONSTRAINTS` | 仅适用于 follower 的约束列表。 | +| `LEARNER_CONSTRAINTS` | 仅适用于 learner 的约束列表。 | +| `LEARNERS` | 指定 learner 的数量。 | ## 示例 @@ -134,6 +169,7 @@ CREATE TABLE t1 (a INT) PLACEMENT POLICY=eastandwest; 除了给表绑定放置策略之外,你还可以给表分区绑定放置策略。示例如下: ```sql +CREATE PLACEMENT POLICY p1 FOLLOWERS=5; CREATE PLACEMENT POLICY europe PRIMARY_REGION="eu-central-1" REGIONS="eu-central-1,eu-west-1"; CREATE PLACEMENT POLICY northamerica PRIMARY_REGION="us-east-1" REGIONS="us-east-1"; @@ -141,12 +177,15 @@ SET tidb_enable_list_partition = 1; CREATE TABLE t1 ( country VARCHAR(10) NOT NULL, userdata VARCHAR(100) NOT NULL -) PARTITION BY LIST COLUMNS (country) ( +) PLACEMENT POLICY=p1 PARTITION BY LIST COLUMNS (country) ( PARTITION pEurope VALUES IN ('DE', 'FR', 'GB') PLACEMENT POLICY=europe, PARTITION pNorthAmerica VALUES IN ('US', 'CA', 'MX') PLACEMENT POLICY=northamerica + PARTITION pAsia VALUES IN ('CN', 'KR', 'JP') ); ``` +如果分区没有绑定任何放置策略,分区将尝试继承表上可能存在的策略。比如,`pEurope` 分区将会应用 `europe` 策略,而 `pAsia` 分区将会应用表 `t1` 的放置策略 `p1`。如果 `t1` 没有绑定任何策略,`pAsia` 就不会应用任何策略。 + ### 为数据库配置默认的放置规则 你可以为某个数据库指定默认的放置策略,类似于为数据库设置默认字符集或排序规则。如果没有指定其他选项,就会使用数据库上指定的配置。示例如下: @@ -173,7 +212,7 @@ CREATE TABLE t4 (a INT); -- 创建表 t4,默认的放置策略 p3 生效。 ALTER PLACEMENT POLICY p3 FOLLOWERS=3; -- 绑定策略 p3 的表,也就是 t4,会采用 FOLLOWERS=3。 ``` -用户可以通过使用 [`ALTER PLACEMENT POLICY`](/sql-statements/sql-statement-alter-placement-policy.md) 改变放置策略,从而改变已从数据库继承放置规则的表。 +注意分区与表之间的继承和这里的继承不同。改变表的放置策略,也会让分区应用新的策略。但是只有建表时没有指定放置策略的时候,表才会从数据库继承放置策略,且之后再改变数据库也不影响已经继承的表。 ### 高级放置选项 @@ -207,12 +246,19 @@ PARTITION BY RANGE( YEAR(purchased) ) ( > > 字典和列表格式都基于YAML解析,但 YAML 语法有些时候不能被正常解析。例如 YAML 会把 "{+disk=ssd:1,+disk=hdd:2}" 错误地解析成 '{"+disk=ssd:1": null, "+disk=hdd:1": null}',不符合预期。但 "{+disk=ssd: 1,+disk=hdd: 1}" 能被正确解析成 '{"+disk=ssd": 1, "+disk=hdd": 1}'。 +## 工具兼容性 + +| 工具名称 | 最低兼容版本 | 说明 | +| --- | --- | --- | +| Backup & Restore (BR) | 6.0 | 支持放置规则的导入与导出,见 [BR 兼容性](/br/backup-and-restore-tool.md#兼容性] | +| TiDB Lightning | 暂时不兼容 | | +| TiCDC | 6.0 | 忽略放置规则,不同步规则到下游集群 | +| TiDB Binlog | 6.0 | 忽略放置规则,不同步规则到下游集群 | + ## 使用限制 -目前已知 Placement Rules in SQL 实验特性存在以下限制: +目前已知 Placement Rules in SQL 特性存在以下限制: -* Dumpling 不支持导出放置策略,见 [issue #29371](https://github.com/pingcap/tidb/issues/29371)。 -* TiDB 生态工具,包括 Backup & Restore (BR)、TiCDC、TiDB Lightning 和 TiDB Data Migration (DM),不支持放置规则。 * 临时表不支持放置规则。 * 设置 `PRIMARY_REGION` 和 `REGIONS` 时允许存在语法糖。但在未来版本中,我们计划为 `PRIMARY_RACK`、`PRIMARY_ZONE` 和 `PRIMARY_HOST` 添加变体支持,见 [issue #18030](https://github.com/pingcap/tidb/issues/18030)。 * 不能通过放置规则语法配置 TiFlash 副本。 diff --git a/releases/release-5.3.0.md b/releases/release-5.3.0.md index c77b1368b21d..2afaf9448ebc 100644 --- a/releases/release-5.3.0.md +++ b/releases/release-5.3.0.md @@ -86,7 +86,7 @@ TiDB 版本:5.3.0 - 把热点数据的 leader 放到高性能的 TiKV 实例上。 - 将冷数据分离到不同的存储中以提高可用性。 - [用户文档](/information-schema/information-schema-placement-rules.md),[#18030](https://github.com/pingcap/tidb/issues/18030) + [用户文档](/placement-rules-in-sql.md),[#18030](https://github.com/pingcap/tidb/issues/18030) - **临时表** diff --git a/sql-statements/sql-statement-alter-placement-policy.md b/sql-statements/sql-statement-alter-placement-policy.md index 5c680543fdb3..e62d96a0359d 100644 --- a/sql-statements/sql-statement-alter-placement-policy.md +++ b/sql-statements/sql-statement-alter-placement-policy.md @@ -33,16 +33,23 @@ PlacementOptionList ::= | PlacementOptionList ',' PlacementOption PlacementOption ::= + CommonPlacementOption +| SugarPlacementOption +| AdvancedPlacementOption + +CommonPlacementOption ::= + "FOLLOWERS" EqOpt LengthNum + +SugarPlacementOption ::= "PRIMARY_REGION" EqOpt stringLit | "REGIONS" EqOpt stringLit -| "FOLLOWERS" EqOpt LengthNum -| "VOTERS" EqOpt LengthNum -| "LEARNERS" EqOpt LengthNum | "SCHEDULE" EqOpt stringLit + +AdvancedPlacementOption ::= + "LEARNERS" EqOpt LengthNum | "CONSTRAINTS" EqOpt stringLit | "LEADER_CONSTRAINTS" EqOpt stringLit | "FOLLOWER_CONSTRAINTS" EqOpt stringLit -| "VOTER_CONSTRAINTS" EqOpt stringLit | "LEARNER_CONSTRAINTS" EqOpt stringLit ``` @@ -56,8 +63,9 @@ PlacementOption ::= ```sql CREATE PLACEMENT POLICY p1 PRIMARY_REGION="us-east-1" REGIONS="us-east-1,us-west-1"; -ALTER PLACEMENT POLICY p1 PRIMARY_REGION="us-east-1" REGIONS="us-east-1,us-west-1,us-west-2" FOLLOWERS=4; -SHOW CREATE PLACEMENT POLICY p1\G +CREATE TABLE t1 (i INT) PLACEMENT POLICY=p1; -- 绑定放置策略 p1 到表 t1。 +ALTER PLACEMENT POLICY p1 PRIMARY_REGION="us-east-1" REGIONS="us-east-1,us-west-1,us-west-2" FOLLOWERS=4; -- t1 上的放置规则会自动更新。 +SHOW CREATE PLACEMENT POLICY p1\G; ``` ``` @@ -65,9 +73,9 @@ Query OK, 0 rows affected (0.08 sec) Query OK, 0 rows affected (0.10 sec) -*************************** 1. row *************************** - Policy: p1 -Create Policy: CREATE PLACEMENT POLICY `p1` PRIMARY_REGION="us-east-1" REGIONS="us-east-1,us-west-1,us-west-2" FOLLOWERS=4 +***************************[ 1. row ]*************************** +Policy | p1 +Create Policy | CREATE PLACEMENT POLICY `p1` PRIMARY_REGION="us-east-1" REGIONS="us-east-1,us-west-1,us-west-2" FOLLOWERS=4 1 row in set (0.00 sec) ``` diff --git a/sql-statements/sql-statement-create-placement-policy.md b/sql-statements/sql-statement-create-placement-policy.md index 4b91f2db4895..01715f976e3f 100644 --- a/sql-statements/sql-statement-create-placement-policy.md +++ b/sql-statements/sql-statement-create-placement-policy.md @@ -26,16 +26,23 @@ PlacementOptionList ::= | PlacementOptionList ',' PlacementOption PlacementOption ::= + CommonPlacementOption +| SugarPlacementOption +| AdvancedPlacementOption + +CommonPlacementOption ::= + "FOLLOWERS" EqOpt LengthNum + +SugarPlacementOption ::= "PRIMARY_REGION" EqOpt stringLit | "REGIONS" EqOpt stringLit -| "FOLLOWERS" EqOpt LengthNum -| "VOTERS" EqOpt LengthNum -| "LEARNERS" EqOpt LengthNum | "SCHEDULE" EqOpt stringLit + +AdvancedPlacementOption ::= + "LEARNERS" EqOpt LengthNum | "CONSTRAINTS" EqOpt stringLit | "LEADER_CONSTRAINTS" EqOpt stringLit | "FOLLOWER_CONSTRAINTS" EqOpt stringLit -| "VOTER_CONSTRAINTS" EqOpt stringLit | "LEARNER_CONSTRAINTS" EqOpt stringLit ``` diff --git a/sql-statements/sql-statement-show-create-placement-policy.md b/sql-statements/sql-statement-show-create-placement-policy.md index facb9df5f1dd..17ce37fffad0 100644 --- a/sql-statements/sql-statement-show-create-placement-policy.md +++ b/sql-statements/sql-statement-show-create-placement-policy.md @@ -28,7 +28,7 @@ PolicyName ::= ```sql CREATE PLACEMENT POLICY p1 PRIMARY_REGION="us-east-1" REGIONS="us-east-1,us-west-1" FOLLOWERS=4; CREATE TABLE t1 (a INT) PLACEMENT POLICY=p1; -SHOW CREATE PLACEMENT POLICY p1\G +SHOW CREATE PLACEMENT POLICY p1\G; ``` ``` @@ -36,9 +36,9 @@ Query OK, 0 rows affected (0.08 sec) Query OK, 0 rows affected (0.10 sec) -*************************** 1. row *************************** - Policy: p1 -Create Policy: CREATE PLACEMENT POLICY `p1` PRIMARY_REGION="us-east-1" REGIONS="us-east-1,us-west-1" FOLLOWERS=4 +***************************[ 1. row ]*************************** +Policy | p1 +Create Policy | CREATE PLACEMENT POLICY `p1` PRIMARY_REGION="us-east-1" REGIONS="us-east-1,us-west-1" FOLLOWERS=4 1 row in set (0.00 sec) ``` diff --git a/sql-statements/sql-statement-show-placement-for.md b/sql-statements/sql-statement-show-placement-for.md index 6feeba781ba9..c6cdd3dcd8ff 100644 --- a/sql-statements/sql-statement-show-placement-for.md +++ b/sql-statements/sql-statement-show-placement-for.md @@ -40,9 +40,9 @@ ALTER DATABASE test PLACEMENT POLICY=p1; CREATE TABLE t1 (a INT); SHOW PLACEMENT FOR DATABASE test; SHOW PLACEMENT FOR TABLE t1; -SHOW CREATE TABLE t1\G +SHOW CREATE TABLE t1\G; CREATE TABLE t3 (a INT) PARTITION BY RANGE (a) (PARTITION p1 VALUES LESS THAN (10), PARTITION p2 VALUES LESS THAN (20)); -SHOW PLACEMENT FOR TABLE t3 PARTITION p1; +SHOW PLACEMENT FOR TABLE t3 PARTITION p1\G; ``` ```sql @@ -50,8 +50,6 @@ Query OK, 0 rows affected (0.02 sec) Query OK, 0 rows affected (0.00 sec) -Query OK, 0 rows affected (0.00 sec) - Query OK, 0 rows affected (0.01 sec) +---------------+----------------------------------------------------------------------+------------------+ @@ -68,18 +66,17 @@ Query OK, 0 rows affected (0.01 sec) +---------------+-------------+------------------+ 1 row in set (0.00 sec) -*************************** 1. row *************************** - Table: t1 -Create Table: CREATE TABLE `t1` ( +***************************[ 1. row ]*************************** +Table | t1 +Create Table | CREATE TABLE `t1` ( `a` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin /*T![placement] PLACEMENT POLICY=`p1` */ 1 row in set (0.00 sec) -+----------------------------+-----------------------------------------------------------------------+------------------+ -| Target | Placement | Scheduling_State | -+----------------------------+-----------------------------------------------------------------------+------------------+ -| TABLE test.t3 PARTITION p1 | PRIMARY_REGION="us-east-1" REGIONS="us-east-1,,us-west-1" FOLLOWERS=4 | INPROGRESS | -+----------------------------+-----------------------------------------------------------------------+------------------+ +***************************[ 1. row ]*************************** +Target | TABLE test.t3 PARTITION p1 +Placement | PRIMARY_REGION="us-east-1" REGIONS="us-east-1,us-west-1" FOLLOWERS=4 +Scheduling_State | PENDING 1 row in set (0.00 sec) ``` diff --git a/system-variables.md b/system-variables.md index def93e4b113a..002a3c37e8bc 100644 --- a/system-variables.md +++ b/system-variables.md @@ -216,13 +216,6 @@ mysql> SELECT * FROM t1; > > `max_execution_time` 目前对所有类型的语句生效,并非只对 `SELECT` 语句生效,与 MySQL 不同(只对`SELECT` 语句生效)。实际精度在 100ms 级别,而非更准确的毫秒级别。 -### `placement_checks` - -- 作用域:SESSION | GLOBAL -- 默认值:`ON` -- 该变量用于控制 DDL 语句是否验证通过 [Placement Rules in SQL](/placement-rules-in-sql.md) 指定的放置规则。 -- 该变量可由逻辑转储或逻辑恢复工具使用,确保即使违反放置规则也始终可以创建表。这类似于 mysqldump 将 `SET FOREIGN_KEY_CHECKS=0;` 写入每个转储文件的开头部分。 - ### `port` - 作用域:NONE @@ -1290,6 +1283,14 @@ explain select * from t where age=5; - 默认值:`ON` - 这个变量用于控制是否开启 [ANALYZE 配置持久化](/statistics.md#analyze-配置持久化)特性。 +### `tidb_placement_mode`(从 v6.0.0 版本开始引入) + +- 作用域:SESSION | GLOBAL +- 默认值:`STRICT` +- 可选值:`STRICT`,`IGNORE` +- 该变量用于控制 DDL 语句是否忽略 [Placement Rules in SQL](/placement-rules-in-sql.md) 指定的放置规则。变量值为 `IGNORE` 时将忽略所有放置规则选项。 +- 该变量可由逻辑转储或逻辑恢复工具使用,确保即使绑定了不合适的放置规则,也始终可以成功创建表。这类似于 mysqldump 将 `SET FOREIGN_KEY_CHECKS=0;` 写入每个转储文件的开头部分。 + ### `tidb_pprof_sql_cpu` 从 v4.0 版本开始引入 - 作用域:INSTANCE