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