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

ApsaraDB RDS:トランザクション分割

最終更新日:Mar 28, 2026

トランザクション分割は、自動コミットが無効化されたトランザクション内で発行される読み取りリクエストを、アプリケーションのコード変更を伴わず、プライマリインスタンスから読み取り専用インスタンスへオフロードします。すべてのクエリが自動コミット無効状態でトランザクション内で実行される場合、読み取り操作には書き込みアクセスが不要であるにもかかわらず、プライマリインスタンスがすべてのリクエストを処理します。トランザクション分割では、最初の書き込み開始前にこれらの読み取りリクエストを読み取り専用インスタンスへルーティングするため、プライマリインスタンスの負荷を低減し、その安定性を向上させます。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

仕組み

デフォルトでは、データベースプロキシはトランザクション内のすべてのリクエストを、読み書き整合性を保つためにプライマリインスタンスへ送信します。これは書き込み操作に必要ですが、書き込みの前に発行される読み取りリクエストについても、読み取り専用インスタンスで安全に処理可能であるにもかかわらず、プライマリインスタンスへ送信されます。

トランザクション分割は、以下の 2 つの条件が同時に満たされた場合にこの動作を変更します。

  • トランザクション分離レベルが READ COMMITTED(PostgreSQL のデフォルト)であること。

  • オートコミットが無効化されていること(autocommit = off)。

これらの条件のもとでは、プロキシは最初の書き込み操作が発生するまで、プライマリインスタンス上でトランザクションを開くのを遅延させます。この書き込み以前に発行されたすべての読み取りリクエストは、ロードバランサーを経由して読み取り専用インスタンスへルーティングされます。

トランザクション分割は、データベースプロキシを有効化すると自動的に有効になります。個別に無効化することはできません。

制限事項

すべてのトランザクションが分割対象となるわけではありません。データベースプロキシを有効化する前に、トランザクション分割がご利用のワークロードに適しているかどうかを確認してください。

制約事項詳細
明示的なトランザクションBEGIN または START TRANSACTION で開始されたトランザクションは、分割されません。明示的なトランザクション内のすべてのリクエストはプライマリインスタンスへ送信されます。
グローバル整合性トランザクション分割は、複数のリクエスト間におけるグローバル整合性を保証できません。データベースプロキシを有効化する前に、このトレードオフを評価してください。
無効化不可データベースプロキシを有効化すると、トランザクション分割は常にアクティブになります。個別に無効化するオプションはありません。

トランザクション分割の利用シーン

トランザクション分割は、アプリケーションが明示的な BEGIN または START TRANSACTION 文を使用せずに、読み取り負荷の高いクエリを自動コミット無効状態のトランザクションでラップする場合に最も効果的です。

シナリオ適用可否
オートコミットが無効化されており、書き込みの前に読み取りが主体となるアプリケーションはい
BEGIN または START TRANSACTIONいいえ — 読み取りは引き続きプライマリインスタンスで処理されます
すべての読み取り操作において厳格なグローバル整合性を要求するワークロードいいえ — グローバル整合性は保証されません

API リファレンス

操作説明
DescribeDBProxyデータベースプロキシの詳細を照会します
DescribeDBProxyEndpointデータベースプロキシエンドポイントの情報を照会します