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;