このトピックでは、SQLステートメントを実行する1つ以上のデータベースシャードを指定するために使用されるヒント構文について説明します。 このトピックでは、サンプルコードも提供します。
このトピックで提供される情報は、PolarDB-X 1.0 V5.3以降に適用されます。
PolarDB-X 1.0を使用しているときに、PolarDB-X 1.0でサポートされていないanSQL文が発生した場合は、PolarDB-X 1.0が提供するNODE HINT
を使用できます。 NODE HINTは、SQL文を実行する1つ以上のデータベースシャードにSQL文をルーティングできます。 指定したデータベースシャードまたはデータベースシャードの指定したテーブルシャード内のデータを照会する必要がある場合は、NODE HINT
を使用してSQL文をデータベースシャードにルーティングできます。
構文
NODE HINT
では、SQLステートメントを実行するデータベースシャードの名前を指定できます。 シャード名は、PolarDB-X 1.0データベース内のデータベースシャードの一意の識別子です。 データベース内のデータベースシャードの名前を照会するには、SHOW NODE
ステートメントを実行します。
SQL文を実行するデータベースシャードの名前を指定するには、2つの方法を使用できます。 1つの方法は、SQL文を実行するデータベースシャードを1つだけ指定することです。 もう1つの方法は、SQL文を実行する複数のデータベースシャードを指定することです。
SQL文を実行するデータベースシャードを指定します。
/* + TDDL: ノード ('node_name')*/
node_name
は、データベースシャードの名前を指定します。 PolarDB-X 1.0ヒントをカスタマイズして、実行用にnode_name
で指定されたデータベースシャードにSQLステートメントをルーティングできます。SQL文を実行する複数のデータベースシャードを指定します。
/* + TDDL:node('node_name'[,'node_name1','node_name2'])*/
複数のシャード名を指定し、コンマ (,) で区切ることができます。 指定されたヒントを含むSQLステートメントは、指定されたデータベースシャードにルーティングされます。
説明- DRDSヒントを含むSQLステートメントを実行すると、PolarDB-X 1.0はSQLステートメントを実行用のデータベースシャードにルーティングします。 SQL文で指定されたテーブル名は、指定されたデータベースシャードに存在する必要があります。
NODE HINT
は、DMLステートメント、DDLステートメント、およびデータアクセス言語 (DAL) ステートメントで使用できます。
注意
- DRDS V5.4.1以降では、PolarDB-X 1.0は、テーブルシャードに対応する物理テーブルの名前のそれぞれに4文字のランダムな文字列を追加します。 論理テーブルのトポロジ関係と物理テーブルの名前を取得するには、SHOW TOPOLOGYステートメントを実行する必要があります。
- DRDS V5.4.4以降では、PolarDB-X 1.0は、テーブルシャードの各物理テーブルの名前にランダムな文字列が含まれているかどうかを制御するスイッチを提供します。 デフォルトでは、このスイッチはオンになっています。 スイッチをオフにするには、DRDSコンソールにログインし、管理するインスタンスのIDをクリックします。 インスタンス詳細ページの左側のナビゲーションウィンドウで、[パラメーター設定] をクリックします。 表示されるページで、[データベース] タブをクリックし、ENABLE_RANDOM_PHY_TABLE_NAMEの値をfalseに設定します。 次のヒントを使用して、SQL文で指定されたテーブルのスイッチをオフにすることもできます:
/* + TDDL:cmd_extra(ENABLE_RANDOM_PHY_TABLE_NAME=FALSE)*/
。 - PolarDB-X 1.0ヒントは、
/* + TDDL:hint_command */
および/!+ TDDL:hint_command */
の形式で指定できます。 /* + TDDL:hint_command */
形式でヒントを指定する場合は、MySQLコマンドラインクライアント: mysqlへのログインに使用するコマンドに-c
パラメーターを追加します。 これにより、クライアントでPolarDB-X 1.0ヒントを含むSQL文を実行できます。 -cパラメーターを追加しない場合、クライアントはSQL文をサーバーに送信して実行する前に、SQL文のコメントを削除します。 この形式のPolarDB-X 1.0ヒントは、MySQLコメントとして定義されます。 したがって、PolarDB-X 1.0ヒントは削除され、有効になりません。 詳細については、「mysql client options」をご参照ください。
例
次の例は、drds_test
という名前のPolarDB-X 1.0データベースのSHOW NODE
によって返される結果を示しています。
mysql> SHOW NODE\G
*************************** 1。 行 ******************
ID: 0
名前: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0000_RDS
MASTER_READ_COUNT: 212
SLAVE_READ_COUNT: 0
マスター_READ_PERCENT: 100%
SLAVE_READ_PERCENT: 0%
*************************** 2. 行 ******************
ID: 1
名前: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0001_RDS
マスター_READ_COUNT: 29
SLAVE_READ_COUNT: 0
マスター_READ_PERCENT: 100%
SLAVE_READ_PERCENT: 0%
3. 行 ******************
ID: 2
名前: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0002_RDS
マスター_READ_COUNT: 29
SLAVE_READ_COUNT: 0
マスター_READ_PERCENT: 100%
SLAVE_READ_PERCENT: 0%
4. 行 ******************
ID: 3
名前: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0003_RDS
マスター_READ_COUNT: 29
SLAVE_READ_COUNT: 0
マスター_READ_PERCENT: 100%
SLAVE_READ_PERCENT: 0%
*************************** 5。 行 ******************
ID: 4
名前: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0004_RDS
マスター_READ_COUNT: 29
SLAVE_READ_COUNT: 0
マスター_READ_PERCENT: 100%
SLAVE_READ_PERCENT: 0%
*************************** 6. 行 ******************
ID: 5
名前: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0005_RDS
マスター_READ_COUNT: 29
SLAVE_READ_COUNT: 0
マスター_READ_PERCENT: 100%
SLAVE_READ_PERCENT: 0%
*************************** 7. 行 ******************
ID: 6
名前: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0006_RDS
マスター_READ_COUNT: 29
SLAVE_READ_COUNT: 0
マスター_READ_PERCENT: 100%
SLAVE_READ_PERCENT: 0%
*************************** 8 行 ******************
ID: 7
名前: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0007_RDS
マスター_READ_COUNT: 29
SLAVE_READ_COUNT: 0
マスター_READ_PERCENT: 100%
SLAVE_READ_PERCENT: 0%
セットの8行 (0.02秒)
結果は、各データベースシャードにNAME
属性があることを示しています。 この属性は、データベースシャードの名前を示します。 返された結果の各シャード名は、1つの一意のデータベースシャードに対応します。 たとえば、シャード名DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0003_RDS
はデータベースのシャードdrds_test_vtla_0003
に対応します。 シャード名を取得したら、PolarDB-X 1.0ヒントを使用して、SQLステートメントを実行するデータベースシャードを指定できます。
- データベースシャード0でSQLステートメントを実行します。
SELECT /* TDDL: ノード ('DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0000_RDS ')*/ * FROM table_name;
- 複数のデータベースシャードでSQL文を実行します。
SELECT /* TDDL: ノード ('DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0000_RDS ','DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0006_RDS')*/ * FROM table_name;
SQL文は、
DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0000_RDS
シャードとDRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0006_RDS
シャードで実行されます。 - データベースシャード0のSQLステートメントの物理実行プランを表示します。
/* TDDL: ノード ('DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0000_RDS ')*/ EXPLAIN SELECT * FROM table_name; '''