KitayamaTakahiro

VACUUM処理が阻害されるケースとその原因・検知・対策

この記事のポイント

VACUUM コマンドや 自動VACUUM は成功するのだけれども(コマンド応答にもログにも ERROR などは出ないけれども)、実際にはデッドタプルが回収されない状況が発生することがあります。
VACUUMが期待通りに動作しない場合、以下を確認することで原因特定が可能です。

  • ログに「are dead but not yet removable」が出ているか(*)
  • ログの「removable cutoff / oldest xmin」の数字が進んでいないか(*)
  • 以下のビューを確認する(ストリーミングレプリケーション環境の場合はスタンバイ側も)
    • pg_stat_activity
    • pg_replication_slots
    • pg_prepared_xacts

主な原因は以下の3つです。

  1. ロングトランザクション
  2. レプリケーションスロット
  3. プリペアドトランザクション

対策の本質は 「oldest xminを固定している要因を解消すること」 です。
(*) log_autovacuum_min_duration パラメータを0や正の数で設定して自動VACUUM実行結果をログに出力する必要があります。

続きを読む

pg_store_plans (PostgreSQL 実行計画記録ツール)

pg_store_plans とは

pg_store_plans は PostgreSQL の実行計画を取得するためのオープンソースソフトウェアで、PostgreSQL の拡張機能として実装されています。
開発元はNTT OSSセンターのDBチームで、pg_hint_plan、pg_bulkload、pg_rman、pg_statsinfo などの著名なソフトウェアを開発しています。

続きを読む

pgAudit (PostgreSQL 監査ロギングツール)

本記事では、PostgreSQL 監査ロギングツール「pgAudit」のインストール方法、監査ログ取得方法について紹介します。

pgAudit とは

pgAudit は PostgreSQL で監査ログを取得するためのオープンソースソフトウェアで、PostgreSQL の拡張機能として実装されています。監査する対象として設定した内容は、PostgreSQL ログに混在して出力されます。

続きを読む