このトピックでは、読み取り /書き込みモードが読み書き (自動読み書き分離) に設定されているクラスターエンドポイントにヒントを使用する方法について説明します。
制限事項
ヒントは、クラスターエンドポイントに対して読み取り /書き込みモードを読み書き (自動読み書き分離) に設定した後にのみ使用できます。 読み書きモードが読み取り専用に設定されているクラスターエンドポイントまたはプライマリエンドポイントでは、ヒントはサポートされていません。 クラスターエンドポイントの読み取り /書き込みモードの詳細については、「エンドポイント」トピックの「クラスターエンドポイントの読み取り /書き込みモード」をご参照ください。
使用上の注意
ヒントは、最も高いルーティング優先度を有し、一貫性レベルまたはトランザクション分割によって制限されない。 ヒントを使用する前に、評価を実行します。
使用量
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.processlist、information_schema.innodb_trx、performance_schema.threads、performance_schema.metadata_locks、sys.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;
ステートメントを実行すると、エラーが発生する可能性があります。