現在のセッション内で、以降の SQL ステートメントをデータノード上の特定のシャードにルーティングし、デフォルトの自動ルーティングロジックをバイパスします。
構文
SET PARTITION_HINT = [PARTITION_NAME | GROUP_NAME | GROUP_NAME:TABLE_INDEX]ヒントをクリアしてすべてのシャードに対するクエリを再開するには、空文字列を指定します:
SET PARTITION_HINT = '';パラメーター
| パラメーター | 説明 |
|---|---|
PARTITION_NAME | AUTO モードのデータベースにおける対象パーティションの partition_name です。 |
GROUP_NAME | DRDS モードのデータベースにおける対象グループの GROUP_NAME です。 |
GROUP_NAME:TABLE_INDEX | DRDS モードのデータベースにおいて、1 つのグループに複数のテーブルが含まれる場合の、グループ名とそのグループ内におけるテーブルのゼロベースインデックスです。 |
注意事項
バージョン要件: PolarDB-X 5.4.16-16773973 クラスターのみでサポートされます。
モード対応: AUTO モードおよび DRDS モードのデータベースでサポートされます。
ユースケース
データ分散のデバッグ: 特定のシャードに対して直接クエリを実行し、そのシャード上に格納されている行を確認します。
シャード単位のパフォーマンス分離: 負荷の不均衡を診断するために、1 つのシャードずつ順次クエリを実行します。
シャードレベルの結果検証: 書き込み後に、特定のパーティションまたはグループに期待通りのデータが格納されていることを確認します。
例
以下の例では、3 つのシャードに分散されたテーブル multi_db_single_tbl を使用します。各シャードには 1 行のデータが格納されており、それぞれ (100001, 'a')、(100002, 'b')、(100003, 'c') です。
単一シャードへのクエリ
ヒントを設定して、PARTITION_HINT_TEST_DRDS_000003_GROUP(テーブルインデックス 0)にルーティングします:
SET PARTITION_HINT = 'PARTITION_HINT_TEST_DRDS_000003_GROUP:0';Query OK, 0 rows affected (0.00 sec)クエリを実行します。このシャード上に格納されている行のみが返されます:
SELECT * FROM multi_db_single_tbl;+--------+------+
| id | name |
+--------+------+
| 100003 | c |
+--------+------+
1 row in set (0.02 sec)全シャードへのクエリ
すべてのシャードに対するデフォルトのルーティングを復元するには、ヒントをクリアします:
SET PARTITION_HINT = '';Query OK, 0 rows affected (0.00 sec)同一のクエリを実行します。3 行すべてが返されます:
SELECT * FROM multi_db_single_tbl;+--------+------+
| id | name |
+--------+------+
| 100003 | c |
+--------+------+
| 100002 | b |
+--------+------+
| 100001 | a |
+--------+------+
3 rows in set (0.04 sec)