分散テーブル(v8.5.4の新機能)
DISTRIBUTE TABLEステートメントは、指定されたテーブルのリージョンを再分配および再スケジュールし、テーブルレベルでバランスの取れた分散を実現します。このステートメントを実行することで、リージョンが少数のTiFlashまたは TiKV ノードに集中するのを防ぎ、テーブル内のリージョンの分散が不均一になる問題を解決できます。
あらすじ
- DistributeTableStmt
- TableName
- PartitionNameList
DistributeTableStmt ::=
"DISTRIBUTE" "TABLE" TableName PartitionNameListOpt "RULE" EqOrAssignmentEq Identifier "ENGINE" EqOrAssignmentEq Identifier "TIMEOUT" EqOrAssignmentEq Identifier
TableName ::=
(SchemaName ".")? Identifier
PartitionNameList ::=
"PARTITION" "(" PartitionName ("," PartitionName)* ")"
パラメータの説明
DISTRIBUTE TABLEステートメントを使用してテーブル内のリージョンを再分配する場合、バランスの取れた分配のために、storageエンジン ( TiFlashや TiKV など) とさまざまなRaftロール (Leader、Learner、投票者など) を指定できます。
RULE: バランス調整とスケジュールを行うRaftロールのリージョンを指定します。オプションの値は"leader-scatter"、"peer-scatter"、および"learner-scatter"。ENGINE:storageエンジンを指定します。オプションの値は"tikv"と"tiflash"。TIMEOUT: 散布操作のタイムアウト制限を指定します。PD がこの時間内に散布を完了しない場合、散布タスクは自動的に終了します。このパラメーターが指定されていない場合、デフォルト値は"30m"です。
例
TiKV 上の表t1のリーダーの領域を再分配します。
CREATE TABLE t1 (a INT);
...
DISTRIBUTE TABLE t1 RULE = "leader-scatter" ENGINE = "tikv" TIMEOUT = "1h";
+--------+
| JOB_ID |
+--------+
| 100 |
+--------+
TiFlash上の表t2内の学習者の領域を再分配します。
CREATE TABLE t2 (a INT);
...
DISTRIBUTE TABLE t2 RULE = "learner-scatter" ENGINE = "tiflash";
+--------+
| JOB_ID |
+--------+
| 101 |
+--------+
TiKV 上のテーブルt3のp1およびp2パーティション内のピアのリージョンを再分配します。
CREATE TABLE t3 ( a INT, b INT, INDEX idx(b)) PARTITION BY RANGE( a ) (
PARTITION p1 VALUES LESS THAN (10000),
PARTITION p2 VALUES LESS THAN (20000),
PARTITION p3 VALUES LESS THAN (MAXVALUE) );
...
DISTRIBUTE TABLE t3 PARTITION (p1, p2) RULE = "peer-scatter" ENGINE = "tikv";
+--------+
| JOB_ID |
+--------+
| 102 |
+--------+
TiFlash 上のテーブルt4のp1およびp2TiFlashでLearnerの領域を再分配します。
CREATE TABLE t4 ( a INT, b INT, INDEX idx(b)) PARTITION BY RANGE( a ) (
PARTITION p1 VALUES LESS THAN (10000),
PARTITION p2 VALUES LESS THAN (20000),
PARTITION p3 VALUES LESS THAN (MAXVALUE) );
...
DISTRIBUTE TABLE t4 PARTITION (p1, p2) RULE = "learner-scatter" ENGINE="tiflash";
+--------+
| JOB_ID |
+--------+
| 103 |
+--------+
注記
DISTRIBUTE TABLEステートメントを実行してテーブルのリージョンを再分配すると、リージョンの分配結果が PD ホットスポット スケジューラの影響を受ける可能性があります。再分配後、このテーブルのリージョンの分配は時間の経過とともに再び不均衡になる可能性があります。
MySQLとの互換性
このステートメントは、MySQL構文に対するTiDBの拡張機能です。