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

PolarDB:ヒント

最終更新日:Sep 27, 2024

このトピックでは、読み取り /書き込みモードが読み書き (自動読み書き分離) に設定されているクラスターエンドポイントにヒントを使用する方法について説明します。

制限事項

ヒントは、クラスターエンドポイントに対して読み取り /書き込みモードを読み書き (自動読み書き分離) に設定した後にのみ使用できます。 読み書きモードが読み取り専用に設定されているクラスターエンドポイントまたはプライマリエンドポイントでは、ヒントはサポートされていません。 クラスターエンドポイントの読み取り /書き込みモードの詳細については、「エンドポイント」トピックの「クラスターエンドポイントの読み取り /書き込みモード」をご参照ください。

使用上の注意

ヒントは、最も高いルーティング優先度を有し、一貫性レベルまたはトランザクション分割によって制限されない。 ヒントを使用する前に、評価を実行します。

使用量

  • SQL文の前に /* FORCE_MASTER */ または /* FORCE_SLAVE */ ヒントを追加して、SQL文のルーティング方向を強制的に指定できます。

    たとえば、SELECT * FROM testステートメントが読み取り専用ノードにルーティングされているとします。 SQL文が /* FORCE_MASTER */ SELECT * FROM testに変更された場合、SQL文はプライマリノードにルーティングされます。 /* FORCE_MASTER */ ヒントは、読み書きモードが読み書き (自動読み書き分離) に設定されているエンドポイントでのみ有効です。 読み取り /書き込みモードが読み取り専用に設定されているエンドポイントのSQL文の前に /* FORCE_MASTER */ ヒントを追加すると、SQL文はプライマリノードにルーティングされません。

  • SQL文の前に /* force_node='<ノードID>' */ ヒントを追加して、SQL文を実行するノードを強制的に指定できます。

    たとえば、/* force_node='pi-bpxxxxxx' */ SHOW PROCESSLISTでは、SHOW PROCESSLISTステートメントがpi-bpxxxxxxxxxxという名前のノードで実行されることを指定します。 ノードが使用できない場合は、強制ヒントサーバーノードが見つかりません。確認してください。 エラーメッセージが返されます。

  • SQL文の前に /* force_proxy_internal */set force_node = '<Node ID>' ヒントを追加して、すべてのSQL文を実行するノードを強制的に指定できます。

    たとえば、/* force_proxy_internal */set force_node = 'pi-bpxxxxxxxx' ステートメントを実行すると、後続のすべてのSQLステートメントはpi-bpxxxxxxxxxxという名前のノードにルーティングされます。 ノードに障害が発生した場合、set forceノード 'rr-bpxxxxx' が見つかりません。確認してください。 エラーメッセージが返されます。

  • SQLステートメントの前に /* force_all */ hintを追加して、ステートメントをすべてのノードに強制的にブロードキャストできます。 返される結果は、クエリのシナリオによって異なります。

    説明

    PolarProxyは2.8.36以降である必要があります。 PolarProxyバージョンを表示および更新する方法については、「マイナーバージョンの更新」をご参照ください。

    • information_schema.processlistinformation_schema.innodb_trxperformance_schema.threadsperformance_schema.metadata_lockssys.schema_table_lock_waitsなどの特定のシステムテーブルを照会するためにこのステートメントを使用すると、すべてのノードのマージ結果が返されます。

      たとえば、/* force_all */SELECT * FROM information_schema.processlistステートメントを実行すると、PolarProxyはすべてのノードにステートメントをブロードキャストし、すべてのノードのマージ結果を返します。 /* force_all */ ヒントを追加せずにSELECT * FROM information_schema.processlistステートメントを実行すると、ステートメントはランダムなノードにルーティングされます。

    • ステートメントを他のデータベースやテーブルのクエリに使用する場合、または他のシナリオで使用する場合は、プライマリデータベースの結果のみが返されます。

  • 行ストアノードと列ストアノード間のリクエストの自動配布を有効にした場合、/* FORCE_IMIC_NODES */ ヒントを追加して、リクエストを列ストアノードに強制的にルーティングできます。 詳細については、「行ストアおよび列ストアノード間のリクエストの自動配布」をご参照ください。

    説明
    • ヒントは大文字と小文字を区別しないため、SQLステートメントの前に配置する必要があります。

    • MySQLの公式コマンドラインでヒントを含む上記のSQL文を実行する場合は、SQL文に -cパラメーターを追加します。 それ以外の場合、MySQLの公式コマンドラインがヒントを除外するため、ヒントは無効になります。 詳細については、「mysqlクライアントオプション」をご参照ください。

    • SQL文では /* force_proxy_internal */ を使用しないことを推奨します。 それ以外の場合、後続のすべてのSQL文は指定されたノードにルーティングされ、読み書き分離機能は無効になります。

    • ヒントは、環境変数を変更するSQL文と組み合わせることはできません。 たとえば、/* FORCE_SLAVE */ SET NAMES utf8; ステートメントを実行すると、エラーが発生する可能性があります。