パフォーマンスの問題を回避するための Amazon RDS および Amazon Aurora の PostgreSQL データベースに対するメンテナンスアクティビティ - AWS 規範ガイダンス

パフォーマンスの問題を回避するための Amazon RDS および Amazon Aurora の PostgreSQL データベースに対するメンテナンスアクティビティ

Amazon Web Services (AWS)、Anuradha Chintha、Rajesh Madiwale、Srinivas Potlachervoo

2025 年 8 月 (ドキュメント履歴)

Amazon Aurora PostgreSQL 互換エディションデータベースおよび PostgreSQL 用の Amazon Relational Database Service (Amazon RDS) は、完全に管理された PostgreSQL データベース用リレーショナルデータベースサービスです。これらのマネージドサービスにより、データベース管理者は多くのメンテナンスおよび管理タスクから解放されます。ただし、VACUUM などの一部のメンテナンスタスクでは、データベースの使用状況に基づいて綿密なモニタリングと設定が必要となります。このガイドでは、Amazon RDS および Aurora における PostgreSQL のメンテナンスアクティビティについて説明します。

目標とするビジネス成果

データベースのパフォーマンスは、ビジネス成功の基礎となる重要な指標です。Aurora PostgreSQL 互換データベースおよび Amazon RDS for PostgreSQL データベースでメンテナンスアクティビティを実行することには、次の利点があります。

  • 最適なクエリパフォーマンスを達成できる

  • 将来のトランザクションで再利用できるように肥大した領域を解放する

  • トランザクションの循環を防止する

  • オプティマイザにより適切なプランを生成できる

  • インデックスの適切な使用を確保する

マルチバージョン同時実行制御 (MVCC)

PostgreSQL データベースのメンテナンスでは、PostgreSQL のメカニズムであるマルチバージョン同時実行制御 (MVCC) について理解する必要があります。データベースで複数のトランザクションが同時に処理される場合、MVCC により ACID トランザクション (原子性、一貫性、分離性、持続性) のうちの 2 つの特性である原子性と分離性が維持されるようにします。MVCC では、書き込み操作のたびに新しいバージョンのデータが生成され、以前のバージョンが保存されます。リーダーとライターが互いにブロックしあうことはありません。トランザクションでデータを読み取ったら、システムでトランザクションを分離するためにいずれかのバージョンが選択されます。PostgreSQL と一部のリレーショナルデータベースでは、スナップショット分離 (SI) と呼ばれる MVCC の適応が使用されます。例えば、Oracle ではロールバックセグメントを使用して SI が実装されています。書き込み操作中、Oracle では古いバージョンのデータをロールバックセグメントに書き込み、データ領域を新しいバージョンで上書きします。PostgreSQL データベースには、可視性チェックルールを用いて SI が実装され、各バージョンが評価されます。新しいデータがテーブルページに配置されると、PostgreSQL はこれらのルールを使用して、読み取り操作に適したバージョンのデータを選択します。

テーブル行のデータを変更すると、PostgreSQL は MVCC を使用して複数のバージョンの行を維持します。テーブルの UPDATE および DELETE 操作中、データベースには、データの一貫したビューを必要とする可能性のある他の実行中のトランザクションの古いバージョンの行が保持されます。これらの古いバージョンはデッド行 (タプル) と呼ばれます。デッドタプルが集合することで肥大化します。データベースの肥大化は、クエリプランの生成不足、クエリパフォーマンスの低下、古いバージョンを保存することによるディスク容量の使用増大など、多くの問題を引き起こす可能性があります。

肥大化を削除し、データベースを正常な状態に保つには、定期的なメンテナンスが必要です。これには、以下のセクションで説明するアクティビティが含まれます。