本文へPostgresを遅くする方法
概要
- Postgresを 意図的に遅くする ための設定例とその理由
- postgresql.conf パラメータのみでの調整に限定
- 実際のベンチマーク環境と 測定方法 の紹介
- キャッシュ・自動バキューム・WAL(Write-Ahead Log)の 徹底的な非効率化
- ログ出力 や副作用も考慮した詳細な設定例
Postgresを意図的に遅くする設定チャレンジ
- 多くの人が Postgresの高速化 に注力する中、敢えて 遅くする方法 を模索
- ハードウェアやインデックス削除などの極端な手法は禁止、 postgresql.conf 内のパラメータ調整のみ許可
- 最低限1トランザクションは処理可能な状態を維持する制限
- ベンチマーク条件
- TPC-C(Benchbase 128 warehouses使用)
- 100接続、各10,000 TPS目標
- Postgres 19devel(2025年7月時点最新版)
- Linux 6.15.6, Ryzen 7950x, 32GB RAM, 2TB SSD
- 各テスト120秒、2回実行(ウォームアップ+計測)
基準値測定
- デフォルト設定(shared_buffers, work_mem, worker数のみ増加)で 7082 TPS 達成
キャッシュの徹底縮小
- Postgresは shared_buffers でディスクから読み込んだデータをRAMにキャッシュ
- キャッシュを極小化することで ディスクI/O依存度増大、レスポンス低下
- 例:shared_buffers = 8MB → キャッシュヒット率70.52%、リードシステムコール約300倍増加、TPSは1/7に
- shared_buffers = 2MB(最小値付近)→ 500 TPS以下
自動バキューム・ANALYZEの過剰化
- autovacuum は通常、不要な領域解放や統計情報収集のため適切な頻度で実行
- これを極端に高頻度化し、常時バックグラウンドで 無駄な処理 を走らせる
- autovacuum_vacuum_insert_threshold = 1
- autovacuum_vacuum_threshold = 0
- autovacuum_vacuum_scale_factor = 0
- autovacuum_vacuum_max_threshold = 1
- autovacuum_naptime = 1(最小値)
- vacuum_cost_limit = 10000(バキュームを止めない)
- vacuum_cost_page_dirty/hit/miss = 0
- maintenance_work_mem = 128kB(バキューム用メモリ最小化)
- log_autovacuum_min_duration = 0、logging_collector = on、log_destination = stderr,jsonlog(全ログ出力)
- ANALYZE関連も同様に最小閾値化
- 副作用:バキューム・ANALYZEが 1秒ごとに連発、キャッシュヒット率低下と合わせ I/O負荷増大
- この時点で 293 TPS まで低下
WAL(Write-Ahead Log)による書き込み負荷増大
- Postgresはデータ変更を即座にWALへ書き込み、その後チェックポイントでディスク反映
- WALの フラッシュ間隔・チェックポイント頻度 を限界まで短縮
- wal_writer_flush_after = 0(書き込み都度フラッシュ)
- wal_writer_delay = 1(最小遅延)
- min_wal_size = 32MB, max_wal_size = 32MB(最小セグメント数)
- checkpoint_timeout = 30(最小値)
- checkpoint_flush_after = 1(8kBごとにフラッシュ)
- wal_sync_method = open_datasync(最も遅い同期方式)
- wal_level = logical(最大情報量出力)
- wal_log_hints = on, summarize_wal = on, track_wal_io_timing = on(追加負荷)
- checkpoint_completion_target = 0(I/O分散なし)
- 結果: TPSは二桁台 (1/70以下)まで低下、WAL効率の悪化をログでも確認
まとめ
- Postgresを遅くする には、キャッシュ縮小・自動バキューム頻発・WAL書き込み負荷増大の 三本柱
- これらは 本来推奨されない設定 だが、パラメータの理解や逆説的なチューニング知識の深化に有用
- 各設定は 副作用や運用リスク を伴うため、実運用環境では絶対に真似しないこと
提供: ハクソク · 要約更新:
AIによる日本語要約です。内容は原文とあわせてご確認ください。
Hacker Newsの議論を読む
これめっちゃいいね!物事を悪化させる方法についての続編やシリーズ本があったら最高だな。そうすることで、逆に物事を良くする方法を学べるかも。O'Reillyみたいに、表紙に下手くそなファンタジー動物が描かれてて、例えば、7歳の子供が描いたユニコーンが体の両側に頭があって、両方がAirPodsで話しながら詐欺師にお金を渡したり、パワーポイントのスライド作ったり、食べ過ぎたり、薬やったり、Facebookでライブ配信したり、遠くに列車が見える線路の上に立ってたりする感じ。