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

PolarDB:行ストアおよび列ストアノード間の手動リクエスト配布

最終更新日:May 30, 2024

異なるアプリケーションを使用してOLAPサービスとOLTPサービスのリクエストを送信する場合は、アプリケーションに異なるクラスターエンドポイントを設定してから、行ストアノードと列ストアノードを異なるクラスターエンドポイントに関連付けてリクエストを配信できます。

手動リクエスト配布ソリューション

リクエスト配布ルール:

  • OLTPサービス: 通常、読み取りおよび書き込み要求が含まれます。 すべてのOLTP書き込み要求はプライマリノードに配信され、OLTP読み取り要求は読み取り専用の行ストアノードまたはプライマリノードに配信されます。

  • OLAPサービス: 通常、読み取り要求のみが含まれます。 すべてのOLTP読み取り要求は、読み取り専用列ストアノードに分散されます。

手動リクエスト配布ソリューション (読み書き または読み取り専用)

  • OLTPアプリケーションの読み取り専用列ストアノードに関連付けられていないクラスターエンドポイントを指定します。 このように、OLTP読み取り要求は、プライマリノードまたは読み取り専用の行ストアノードによって処理されます。

  • OLAPアプリケーションの読み取り専用列ストアノードにのみ関連付けられているクラスターエンドポイントを指定します。 このようにして、OLAP読み取り要求は読み取り専用列ストアノードによって処理されます。

独立

手順

OLTPサービスとOLAPサービスに異なるクラスターエンドポイントを設定する必要があります。 クラスターエンドポイントの設定方法の詳細については、「エンドポイントの表示」をご参照ください。

クラスターエンドポイントを設定するときは、次の項目に注意してください。

  • OLTPサービスのクラスターエンドポイント:

    • 読み取り専用モードでは、選択したノードリストに読み取り専用の行ストアノードのみを追加できます。

    • 読み書き モードでは、選択したノードリストに読み取り専用の行ストアノードを1つ以上追加することを推奨します。 プライマリノードによる読み取りリクエストの許可 パラメーターが [はい] に設定されている場合、読み取り要求もプライマリノードに配信されます。

      説明

      読み書き モードでは、選択したノードリストにプライマリノードが追加されているかどうかに関係なく、すべての書き込みリクエストはプライマリノードにのみ配信されます。

  • OLAPサービスのクラスターエンドポイント: ほとんどの場合、OLAPサービスには読み取り要求のみが含まれます。 したがって、読み取り専用モードを選択することを推奨します。 読み取り専用モードでは、選択したノードリストに少なくとも1つの読み取り専用列ストアノードを追加する必要があります。

ヒントを使用して、列ストアまたは行ストア実行プランを使用して要求を強制的に実行する

手動によるリクエスト配布の結果が期待どおりでない場合は、ヒントを使用して、列ストアまたは行ストアの実行プランを使用してリクエストを実行できます。

説明
  • ヒントは、それが含まれているSQL文に対してのみ有効です。 ヒントは、同じ接続内の他のステートメントまたは他の接続内のステートメントに対しては有効になりません。

  • MySQL 5.7.7以前を使用してヒントとともにステートメントを実行する場合は、データベースエンジンに接続するときに -- commentsオプションを追加する必要があります。 mysql -- versionコマンドを実行して、MySQLクライアントのバージョンを確認できます。

  • 列ストア実行プランを使用してステートメントを強制的に実行する

    ステートメントが読み取り専用列ストアノードに配布された後、システムは、推定実行コストに基づいて行ストアまたは列ストア実行プランを使用してステートメントを実行するかどうかを決定します。 実行コストがloose_cost_threshold_for_imci値より大きい場合、列ストア実行プランが使用されます。 それ以外の場合、行ストア実行プランが使用されます。 loose_cost_threshold_for_imciの値に関係なく、列ストア実行プランを使用してステートメントを強制的に実行する場合は、/* + SET_VAR(cost_threshold_for_imci=0)*/ hintをステートメントに追加して、しきい値を0に変更します。 例:

    /* FORCE_IMCI_NODES */EXPLAIN SELECT /* + SET_VAR(cost_threshold_for_imci=0) */ COUNT(*) FROM t1 WHERE t1.a > 1;
    説明

    /* + SET_VAR()*/ を使用してしきい値を変更する場合は、パラメーター名のloose_ プレフィックスを省略する必要があります。 それ以外の場合、ヒントは有効になりません。

  • 行ストア実行プランを使用したステートメントの強制実行

    行ストア実行プランを使用してステートメントを強制的に実行する場合は、/* + SET_VAR(USE_IMCI_ENGINE=OFF) * /ヒントをステートメントに追加できます。 サンプル文:

    EXPLAIN SELECT /* + SET_VAR(USE_IMCI_ENGINE=OFF) */ COUNT(*) FROM t1 WHERE t1.a > 1;