すべてのプロダクト
Search
ドキュメントセンター

PolarDB:SQL文を実行するデータベースシャードの指定

最終更新日:May 29, 2024

このトピックでは、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文を実行する複数のデータベースシャードを指定することです。

重要 データベースシャードの指定に使用されるヒント文がINSERT文に含まれていて、このINSERT文に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; '''