ODPによるトランザクションルーティング
OBProxyはトランザクションに対して2種類のルーティング方式を提供します。一つは同一トランザクション内のステートメントを統合して一つのデータノードで実行する方式です。もう一つはトランザクション内のステートメントを分割し、異なるデータノードにルーティングして実行する方式であり、OBProxyが異なるデータノード間のトランザクション状態を同期することで、トランザクションの分割実行を完了します。本記事では主にOBProxyによるトランザクション分割実行のルーティング方式について説明します。 トランザクションルーティングは、2.0プロトコルに依存してトランザクション状態の同期を行います。
トランザクションルーティングノードの選択
トランザクションルーティングの実行ノードは、コーディネーターとパートナーの2種類のノードに分かれます。コーディネーターノードはトランザクションの開始ノードであり、BEGIN、START TRANSACTION、COMMIT、ROLLBACKなど、トランザクション状態に影響を与える非DMLステートメントの実行を担当します。一方、パートナーノードはトランザクション内でトランザクション状態に影響を与えないDMLステートメントの実行を担当します。 OBProxyに含まれる簡易SQLパーサーは、SQLステートメントがDMLステートメントであるかどうかを解析できます。OBProxyがステートメントをDMLステートメントと解析した後、テーブルルーティングまたはLDCルーティングを通じて、そのステートメントを適切なノードにルーティングします。ルーティングされたノードがトランザクションのパートナーノードとなります。トランザクションのコーディネーターノードは、トランザクション内の最初のステートメントの実行ノードとなります。
トランザクションルーティングの設定
デフォルトではトランザクションルーティング機能は有効になっており、以下のステートメントを使用してトランザクションルーティング機能の確認や運用保守を行うことができます。
rootユーザーでクラスタのsysテナントにログインします。
2.0プロトコルの設定を確認し、2.0プロトコルが有効になっていることを確認します。
obclient> SHOW PROXYCONFIG LIKE enable_ob_protocol_v2; obclient> ALTER PROXYCONFIG SET enable_ob_protocol_v2=True;以下のステートメントを実行して、OBProxyのトランザクションルーティングを設定します。
obclient> SHOW PROXYCONFIG LIKE enable_transaction_internal_routing; obclient> ALTER PROXYCONFIG SET enable_transaction_internal_routing=True;