重要
このページは英語版のページを機械翻訳しています。原文はこちらからご覧ください。

SQLの配置ルール

SQLの配置ルールは、SQLインターフェイスを使用してTiKVクラスタのどこにデータを格納するかを指定できる機能です。この機能を使用して、テーブルとパーティションが特定のリージョン、データセンター、ラック、またはホストにスケジュールされます。これは、低コストで高可用性戦略を最適化する、データのローカルレプリカをローカルの古い読み取りに使用できるようにする、データの局所性要件を順守するなどのシナリオで役立ちます。

ノート:

SQLでの配置ルールの実装は、PDの配置ルール機能に依存しています。詳しくは配置ルールの構成をご覧ください。 SQLの配置ルールのコンテキストでは、配置ルールは、他のオブジェクトにアタッチされた配置ポリシー、またはTiDBからPDに送信されるルールを参照する場合があります。

詳細なユーザーシナリオは次のとおりです。

  • 異なるアプリケーションの複数のデータベースをマージして、データベースの保守コストを削減します
  • 重要なデータのレプリカ数を増やして、アプリケーションの可用性とデータの信頼性を向上させます
  • 新しいデータをSSDに保存し、古いデータをHHDに保存して、データのアーカイブとストレージのコストを削減します
  • ホットスポットデータのリーダーを高性能TiKVインスタンスにスケジュールする
  • コールドデータを低コストのストレージメディアに分離して、コスト効率を向上させます

配置ルールを指定する

配置ルールを指定するには、最初にCREATE PLACEMENT POLICYを使用して配置ポリシーを作成します。

CREATE PLACEMENT POLICY myplacementpolicy PRIMARY_REGION="us-east-1" REGIONS="us-east-1,us-west-1";

次に、 CREATE TABLEまたはALTER TABLEを使用して、ポリシーをテーブルまたはパーティションにアタッチします。次に、配置ルールがテーブルまたはパーティションで指定されます。

CREATE TABLE t1 (a INT) PLACEMENT POLICY=myplacementpolicy;
CREATE TABLE t2 (a INT);
ALTER TABLE t2 PLACEMENT POLICY=myplacementpolicy;

配置ポリシーはどのデータベーススキーマにも関連付けられておらず、グローバルスコープを持っています。したがって、配置ポリシーを割り当てるには、 CREATE TABLEの特権に追加の特権は必要ありません。

配置ポリシーを変更するには、 ALTER PLACEMENT POLICYを使用できます。変更は、対応するポリシーが割り当てられているすべてのオブジェクトに反映されます。

ALTER PLACEMENT POLICY myplacementpolicy FOLLOWERS=5;

テーブルまたはパーティションに接続されていないポリシーを削除するには、 DROP PLACEMENT POLICYを使用できます。

DROP PLACEMENT POLICY myplacementpolicy;

現在の配置ルールを表示する

テーブルに配置ルールが添付されている場合は、 SHOW CREATE TABLEの出力で配置ルールを表示できます。使用可能なポリシーの定義を表示するには、 SHOW CREATE PLACEMENT POLICYを実行します。

tidb> SHOW CREATE TABLE t1\G
*************************** 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=`myplacementpolicy` */
1 row in set (0.00 sec)

tidb> SHOW CREATE PLACEMENT POLICY myplacementpolicy\G
*************************** 1. row ***************************
       Policy: myplacementpolicy
Create Policy: CREATE PLACEMENT POLICY myplacementpolicy PRIMARY_REGION="us-east-1" REGIONS="us-east-1,us-west-1"
1 row in set (0.00 sec)

INFORMATION_SCHEMA.PLACEMENT_POLICIESの表を使用して、配置ポリシーの定義を表示することもできます。

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.tablesinformation_schema.partitionsのテーブルには、配置ルールが添付されたすべてのオブジェクトを示すtidb_placement_policy_nameの列も含まれています。

SELECT * FROM information_schema.tables WHERE tidb_placement_policy_name IS NOT NULL;
SELECT * FROM information_schema.partitions WHERE tidb_placement_policy_name IS NOT NULL;

オブジェクトにアタッチされているルールは非同期で適用されます。配置の現在のスケジュールの進行状況を表示するには、 SHOW PLACEMENTを使用します。

オプションリファレンス

ノート:

配置オプションは、各TiKVノードの構成で正しく指定されたラベルによって異なります。たとえば、 PRIMARY_REGIONオプションはTiKVのregionラベルに依存します。 TiKVクラスタで使用可能なすべてのラベルの要約を表示するには、ステートメントSHOW PLACEMENT LABELSを使用します。

mysql> show placement labels;
+--------+----------------+
| Key    | Values         |
+--------+----------------+
| disk   | ["ssd"]        |
| region | ["us-east-1"]  |
| zone   | ["us-east-1a"] |
+--------+----------------+
3 rows in set (0.00 sec)
オプション名説明
PRIMARY_REGIONいかだリーダーは、このオプションの値と一致するregionのラベルを持つストアに配置されます。
REGIONSいかだフォロワーは、このオプションの値と一致するregionのラベルを持つストアに配置されます。
SCHEDULEフォロワーの配置をスケジュールするために使用される戦略。値のオプションはEVEN (デフォルト)またはMAJORITY_IN_PRIMARYです。
FOLLOWERSフォロワーの数。たとえば、 FOLLOWERS=2は、データのレプリカが3つあることを意味します(フォロワー2つとリーダー1つ)。

上記の配置オプションに加えて、事前構成を使用することもできます。詳細については、 アドバンストプレイスメントオプションを参照してください。

オプション名説明
CONSTRAINTSすべての役割に適用される制約のリスト。たとえば、 CONSTRAINTS="[+disk=ssd]"
LEADER_CONSTRAINTSリーダーにのみ適用される制約のリスト。
FOLLOWER_CONSTRAINTSフォロワーにのみ適用される制約のリスト。
LEARNER_CONSTRAINTS学習者にのみ適用される制約のリスト。
LEARNERS学習者の数。

レプリカの数を増やす

max-replicasのデフォルト構成は3です。特定のテーブルセットに対してこれを増やすには、次のように配置ポリシーを使用できます。

CREATE PLACEMENT POLICY fivereplicas FOLLOWERS=4;
CREATE TABLE t1 (a INT) PLACEMENT POLICY=fivereplicas;

PD構成にはリーダーとフォロワーの数が含まれているため、4つのフォロワー+1つのリーダーは合計5つのレプリカに相当することに注意してください。

この例を拡張するために、 PRIMARY_REGIONREGIONSの配置オプションを使用して、フォロワーの配置を説明することもできます。

CREATE PLACEMENT POLICY eastandwest PRIMARY_REGION="us-east-1" REGIONS="us-east-1,us-east-2,us-west-1" SCHEDULE="MAJORITY_IN_PRIMARY" FOLLOWERS=4;
CREATE TABLE t1 (a INT) PLACEMENT POLICY=eastandwest;

SCHEDULEオプションは、フォロワーのバランスをとる方法についてTiDBに指示します。デフォルトのスケジュールであるEVENは、すべての地域でフォロワーのバランスを確保します。

クォーラムを達成できるように十分なフォロワーがプライマリリージョン( us-east-1 )に配置されるようにするには、 MAJORITY_IN_PRIMARYのスケジュールを使用できます。このスケジュールは、可用性をいくらか犠牲にして、待ち時間の短いトランザクションを提供するのに役立ちます。プライマリリージョンに障害が発生した場合、 MAJORITY_IN_PRIMARYは自動フェイルオーバーを提供できません。

パーティションテーブルに配置を割り当てます

テーブルに配置オプションを割り当てるだけでなく、テーブルパーティションにオプションを割り当てることもできます。例えば:

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";

SET tidb_enable_list_partition = 1;
CREATE TABLE t1 (
  country VARCHAR(10) NOT NULL,
  userdata VARCHAR(100) NOT NULL
) 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パーティションは表t1p1ポリシーを適用します。 t1にポリシーが割り当てられていない場合、 pAsiaもポリシーを適用しません。

特定のパーティションに割り当てられた配置ポリシーを変更することもできます。例えば:

ALTER TABLE t1 PARTITION pEurope PLACEMENT POLICY=p1;

スキーマのデフォルトの配置を設定する

デフォルトの配置ルールをデータベーススキーマに直接アタッチできます。これは、スキーマのデフォルトの文字セットまたは照合順序を設定するのと同様に機能します。指定した配置オプションは、他のオプションが指定されていない場合に適用されます。例えば:

CREATE PLACEMENT POLICY p1 PRIMARY_REGION="us-east-1" REGIONS="us-east-1,us-east-2";  -- Create placement policies

CREATE PLACEMENT POLICY p2 FOLLOWERS=4;

CREATE PLACEMENT POLICY p3 FOLLOWERS=2;

CREATE TABLE t1 (a INT);  -- Creates a table t1 with no placement options.

ALTER DATABASE test POLICY=p2;  -- Changes the default placement option, and does not apply to the existing table t1.

CREATE TABLE t2 (a INT);  -- Creates a table t2 with the default placement policy p2.

CREATE TABLE t3 (a INT) PLACEMENT POLICY=p1;  -- Creates a table t3 without the default policy p2, because this statement has specified another placement rule.

ALTER DATABASE test POLICY=p3;  -- Changes the default policy, and does not apply to existing tables.

CREATE TABLE t4 (a INT);  -- Creates a table t4 with the default policy p3.

ALTER PLACEMENT POLICY p3 FOLLOWERS=3; -- The table with policy p3 (t4) will have FOLLOWERS=3.

これは、パーティションとテーブル間の継承とは異なり、テーブルのポリシーを変更するとパーティションに影響することに注意してください。テーブルは、ポリシーがアタッチされていない状態で作成された場合にのみスキーマのポリシーを継承し、スキーマのポリシーを変更しても、作成されたテーブルには影響しません。

高度な配置オプション

配置オプションPRIMARY_REGION 、およびREGIONSは、ある程度の柔軟性を失いながら、データ配置の基本的なニーズを満たしSCHEDULE 。より高い柔軟性が必要なより複雑なシナリオでは、 CONSTRAINTSおよびFOLLOWER_CONSTRAINTSの高度な配置オプションを使用することもできます。 PRIMARY_REGION 、またはREGIONSオプションとSCHEDULEオプションをCONSTRAINTS指定することはできません。両方を同時に指定すると、エラーが返されます。

たとえば、データがラベルdiskが値と一致する必要があるTiKVストアに存在する必要があるという制約を設定するには、次のようにします。

CREATE PLACEMENT POLICY storeonfastssd CONSTRAINTS="[+disk=ssd]";
CREATE PLACEMENT POLICY storeonhdd CONSTRAINTS="[+disk=hdd]";
CREATE PLACEMENT POLICY companystandardpolicy CONSTRAINTS="";

CREATE TABLE t1 (id INT, name VARCHAR(50), purchased DATE)
PLACEMENT POLICY=companystandardpolicy
PARTITION BY RANGE( YEAR(purchased) ) (
  PARTITION p0 VALUES LESS THAN (2000) PLACEMENT POLICY=storeonhdd,
  PARTITION p1 VALUES LESS THAN (2005),
  PARTITION p2 VALUES LESS THAN (2010),
  PARTITION p3 VALUES LESS THAN (2015),
  PARTITION p4 VALUES LESS THAN MAXVALUE PLACEMENT POLICY=storeonfastssd
);

制約は、リスト形式( [+disk=ssd] )またはディクショナリ形式( {+disk=ssd: 1,+disk=hdd: 2} )のいずれかで指定できます。

リスト形式では、制約はキーと値のペアのリストとして指定されます。キーは+または-で始まります。 +disk=ssdは、ラベルdiskssdに設定する必要があることを示し、 -disk=hddは、ラベルdiskhddに設定してはならないことを示します。

ディクショナリ形式では、制約はそのルールに適用されるインスタンスの数も示します。たとえば、 FOLLOWER_CONSTRAINTS="{+region=us-east-1: 1,+region=us-east-2: 1,+region=us-west-1: 1}";は、1人のフォロワーがus-east-1にあり、1人のフォロワーがus-east-2にあり、1人のフォロワーがus-west-1にいることを示します。別の例では、 FOLLOWER_CONSTRAINTS='{"+region=us-east-1,+disk=hdd":1,"+region=us-west-1":1}';は、1人のフォロワーがhddディスクを使用してus-east-1にあり、1人のフォロワーがus-west-1にいることを示します。

ノート:

辞書とリストの形式は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}'として正しく解析されます。

ツールとの互換性

ツール名サポートされている最小バージョン説明
バックアップと復元(BR)6.0配置ルールのインポートとエクスポートをサポートします。詳細はBRの互換性を参照してください。
TiDB Lightningまだ互換性がありませんTiDB Lightningが配置ポリシーを含むバックアップデータをインポートすると、エラーが報告されます
TiCDC6.0配置ルールを無視し、ルールをダウンストリームに複製しません
TiDB Binlog6.0配置ルールを無視し、ルールをダウンストリームに複製しません

既知の制限

SQLの配置ルールの実験的リリースには、次の既知の制限があります。

  • 一時テーブルは配置オプションをサポートしていません。
  • 設定PRIMARY_REGIONおよびREGIONSには、構文糖衣規則が許可されています。将来的には、 PRIMARY_RACKPRIMARY_ZONEを追加する予定PRIMARY_HOST号18030を参照してください。
  • TiFlashラーナーは、配置ルール構文では構成できません。
  • 配置ルールは、保存されているデータが正しいTiKVストアに存在することのみを保証します。このルールは、転送中のデータ(ユーザークエリまたは内部操作のいずれかを介して)が特定のリージョンでのみ発生することを保証するものではありません。