RDS for PostgreSQLからAurora PostgreSQLへ移行した直後に、同じクエリで実行計画が変わる、レプリカ遅延メトリクスの意味が違う、請求にI/Oという項目が増える、といった食い違いが出ます。どちらも中身はPostgreSQLですから、SQL方言やMVCCとVACUUM、オプティマイザ、ロックの知識はそのまま通用します。差が出るのは、ページとログをどこに置いてどう複製するかというストレージ層です。この設計差がパラメータ既定値とコスト構造にも波及します。
この記事は要約版です。症状別の切り分け手順と待機イベントの読み方の一覧、移行前に残すべきチェックポイントは、ブログの完全版にまとめています: Aurora/RDS PostgreSQLの違いと性能差の原因
結論:確認すべきはパラメータ既定値・コミットパス・レプリケーション方式
挙動差を調べるときは、次の3点を順番に確認してください。
1点目はパラメータ既定値の差で、とくにshared_buffersです。RDS for PostgreSQLは搭載メモリの1/4程度、Aurora PostgreSQLはメモリの大部分を割り当てる既定式になっています。同じインスタンスサイズでもバッファキャッシュのヒット率が変わり、I/O量とレイテンシ、コストに影響します。
2点目はWALとコミットパスの差です。Auroraはストレージ層へredoレコードを送り、ページの再構成はストレージ側が行います。RDSは自インスタンスでWALを書き、Multi-AZならEBSレベルの同期ミラーへの書き込み完了を待ちます。コミット待機の待機イベント名が変わるのはこのためです。
3点目はレプリケーション方式の差です。Auroraのリーダーはライターと同じストレージボリュームを読み、RDSのリードレプリカは専用ストレージへストリーミングレプリケーションで追随します。遅延の単位がミリ秒かバイトかも、遅延が膨らむ条件も違います。
逆に、ロック競合やSQLの書き方が原因の遅さは、Auroraへ移しても解決しません。切り分けの出発点を間違えないようにしてください。
まず両環境で取るべき差分
環境差分の棚卸しから始めます。移行元と移行先の両方で実行して、出力をdiffしてください。
-- 既定値から変更されている設定だけを抽出
SELECT name, setting, unit, source, boot_val, reset_val
FROM pg_settings
WHERE source NOT IN ('default', 'client')
ORDER BY name;
-- プランに影響の大きいものをピンポイントで確認
SELECT name, setting, unit
FROM pg_settings
WHERE name IN (
'shared_buffers','effective_cache_size','work_mem','maintenance_work_mem',
'random_page_cost','seq_page_cost','effective_io_concurrency',
'max_parallel_workers_per_gather','jit','default_statistics_target',
'autovacuum_vacuum_cost_limit','autovacuum_naptime'
)
ORDER BY name;
Auroraはキャッシュに乗る前提、RDSはストレージI/Oが出る前提でチューニングされています。RDS時代にeffective_cache_sizeやrandom_page_costを手で調整していた場合、その値はAuroraでは過大または過小になり得ます。
完全版で扱っている内容
- 症状別の切り分け手順。パラメータ差分の棚卸しから待機イベントの集計、
EXPLAIN (ANALYZE, BUFFERS, SETTINGS, VERBOSE)での比較までを1→2→3の順で実施する手順 - 待機イベントの読み方の一覧表。
IO:DataFileRead、Auroraで頻出するIO:XactSync、RDSで頻出するIO:WALWrite、Lock:transactionidなどが示す原因と対処の方向 - ストレージとWALの扱いの詳細。
full_page_writesが構造的に不要になる理由と、max_wal_sizeやcheckpoint_completion_targetのチューニングがAuroraで同じ意味を持たない理由 - レプリカとフェイルオーバーの違い。
ReplicaLagとAuroraReplicaLagの単位差、リーダーでの長時間クエリとリカバリ処理の競合、Auroraで自前の物理スタンバイを立てられない点 - コストと運用の差分。I/Oリクエスト課金とAurora I/O-Optimizedの比較方法、レプリカ追加コスト、クローン、拡張機能と
shared_preload_librariesの確認クエリ - よくある質問と移行前のチェックポイント。Auroraから戻す場合の方式、ベースライン性能の保存方法、統計情報の再取得計画