このトピックでは、 PolarDB for PostgreSQL (Compatible with Oracle) クラスターのトランザクション分割機能について説明し、トランザクション分割を有効にする方法を示します。
背景情報
読み取り /書き込みモードで PolarDB for PostgreSQL (Compatible with Oracle) クラスターエンドポイントを使用する場合、プロキシは読み取りおよび書き込みリクエストをプライマリノードと読み取り専用ノードに転送します。 セッション内のトランザクションの読み取り /書き込みの一貫性を確保するために、プロキシはセッション内のすべてのトランザクション要求をプライマリノードに送信します。
たとえば、Java database Connectivity (JDBC) ドライバーなどの一部のデータベースクライアントドライバーは、デフォルトですべての要求をトランザクションにカプセル化します。 この場合、アプリケーションからのすべての要求はプライマリノードに送信されます。 これにより、次の図に示すように、プライマリノードの負荷が大きくなり、読み取り専用ノードの負荷が小さくなります。
上記の問題を修正するために、PolarDBは読み取り /書き込みの一貫性を確保するために使用できるトランザクション分割機能を提供します。 この機能は、読み取り専用ノードにトランザクションで読み取り要求を送信することで、プライマリノードの負荷を軽減します。
背景情報
基本的なトランザクション分割
プライマリノードの負荷を軽減するために、PolarProxyは、トランザクションの最初の書き込み要求が読み取り専用ノードに送信される前に受信した読み取り要求を送信します。 トランザクション内のコミットされていないデータは、読み取り専用ノードから照会できません。 トランザクションのデータの一貫性を確保するために、最初の書き込み要求の後に受信されたすべての読み取りおよび書き込み要求は、引き続きプライマリノードに転送されます。 基本的なトランザクション分割を有効にする方法の詳細については、「トランザクション分割の有効化」をご参照ください。
メリット
この機能を使用すると、アプリケーションコードや構成を変更することなく、プライマリノードから読み取り専用ノードに読み取りロードを転送できます。 これは、プライマリノードをより安定させる。
注意事項
Read Committed分離レベルを使用するトランザクションのみを分割できます。
基本的なトランザクション分割を有効にし、整合性レベルが最終的な整合性に設定されていない場合、プロキシは、読み取り専用ノードがプライマリノードからのすべてのデータを同期した後にのみ、トランザクションの最初の書き込み要求の前に受信した読み取り要求を読み取り専用ノードに送信します。 それ以外の場合、プロキシは引き続き読み取り要求をプライマリノードに送信します。 整合性レベルの詳細については、「整合性レベル」をご参照ください。
トランザクション分割の有効化
PolarDBコンソールにログインします。
左上隅で、クラスターがデプロイされているリージョンを選択します。
クラスターを見つけて、そのIDをクリックします。
[クラスターエンドポイント] セクションで、[変更] をクリックします。
トランザクション分離 の横にある [オン] をクリックします。
説明トランザクション分割機能は、新しい接続でのみ有効になります。 この機能を既存の接続に有効にするには、既存の接続を閉じて、再度接続を確立します。
OK をクリックします。
関連する API 操作
API 操作 | 説明 |
PolarDBクラスターエンドポイントの属性を変更します。 たとえば、読み取り /書き込みモード、整合性レベル、トランザクション分割、プライマリノードからの読み取り要求のオフロードなどの属性を変更できます。 指定したクラスターエンドポイントを新しく追加したノードに関連付けるかどうかも指定できます。 |