0Pricing
SQL Academy · レッスン

VACUUM、autovacuum、vacuum_cost_delay

大規模テーブルに向けて、autovacuumのしきい値、vacuum_cost_delay、並列VACUUMを調整します。

「VACUUM、autovacuum、vacuum_cost_delay」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。

3 つの VACUUM モード

  • VACUUM(遅延モード) — デッド行を回収し、空き領域マップを更新します。排他的ロックは取得しません
  • VACUUM FULL — テーブルを書き換えます。排他的ロックを取得し、ディスク領域を OS に返します
  • VACUUM ANALYZE — VACUUM とプランナー統計の更新を一度に実行します

VACUUM の手動実行

Autovacuum が有効な場合でも、役立つことがあります。

VACUUM (VERBOSE) orders;
VACUUM (VERBOSE, ANALYZE) orders;
VACUUM (PARALLEL 4) orders;       -- parallel index cleanup (PG 13+)

Autovacuum のプロセス

バックグラウンドランチャーがワーカーを起動し、しきい値を超えたテーブルをバキュームします。デフォルトでは、少数のワーカーがクラスターを処理します。

テーブル単位の調整

頻繁に更新されるテーブルでは、積極的な autovacuum が効果的です。

ALTER TABLE busy_table SET (
  autovacuum_vacuum_scale_factor = 0.05,    -- 5% dead vs default 20%
  autovacuum_vacuum_threshold    = 1000,
  autovacuum_analyze_scale_factor = 0.05
);

vacuum_cost_delay

VACUUM の I/O を制限し、フォアグラウンドのクエリへの影響を抑えます。PG 12 以降のデフォルトは 2ms で、通常は問題ありません。SSD では、値を小さくできます。

autovacuum_vacuum_cost_delay = 2ms
-- Lower delay = faster vacuum, more I/O usage.
-- Set per-table for hot tables that need faster cleanup.

並列 VACUUM

PG 13 以降、VACUUM はインデックスのクリーンアップを並列化します。

VACUUM (PARALLEL 4) big_table;
-- Each index cleaned by a parallel worker (up to max_parallel_maintenance_workers).

VACUUM FULL:いつ、なぜ使うのか

テーブルを最初から書き換え、領域を OS に返します。ACCESS EXCLUSIVE を取得します。最後の手段としてのみ使用するか、代わりに pg_repack を使用してください。

VACUUM FULL orders;
-- Locks orders; rewrites; on huge tables this is hours of downtime.

pg_repack:オンラインの代替手段

テーブルをオンラインで書き換え、完全なロックを取得しません。VACUUM FULL と同じ効果があり、本番環境で使いやすい方法です。

pg_repack -d mydb -t orders
-- Builds a shadow table, sync, swaps in.

Autovacuum の監視

最後に vacuum/analyze を実行した時刻と、デッドタプル数を確認します。

SELECT relname,
       n_live_tup, n_dead_tup,
       last_autovacuum, last_autoanalyze
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC;

Autovacuum が遅れている場合

症状:

  • 膨張が進む
  • pg_stat_user_tables の n_dead_tup が高い
  • クエリプランが悪化する

対策:autovacuum_max_workers を増やし、テーブルごとのスケールファクターを下げ、VACUUM を妨げている長時間のトランザクションを解消します。

Vacuum のログ出力

調整のために、時間のかかる vacuum をログに記録します。

log_autovacuum_min_duration = '500ms'
-- Logs every autovacuum action that took longer than 500ms.

FREEZE

VACUUM は、xid のラップアラウンドを防ぐために、古いタプルを定期的に「凍結」します。積極的な autovacuum によって freeze age を低く保ち、緊急のラップアラウンドを防止できます。

まとめ

Autovacuum は不可欠であり、ワークロードに合わせて調整します。

  • 頻繁に更新されるテーブルには、テーブル単位の autovacuum 設定を使用します
  • VACUUM FULL は最後の手段とし、pg_repack を優先します
  • n_dead_tup と last_autovacuum を監視します
  • クリーンアップを妨げる長時間のトランザクションを解消します

クイックチェック

長時間ブロックするロックを避けながら、頻繁に使用される本番テーブルのディスク領域を回収する最も安全な方法は何ですか?

よくある質問

「VACUUM、autovacuum、vacuum_cost_delay」レッスンは無料ですか?

はい。「VACUUM、autovacuum、vacuum_cost_delay」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。

「VACUUM、autovacuum、vacuum_cost_delay」で何を学びますか?

大規模テーブルに向けて、autovacuumのしきい値、vacuum_cost_delay、並列VACUUMを調整します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

SQL Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「VACUUM、autovacuum、vacuum_cost_delay」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSQL Academyレッスンでコードを書いて実行できますか?

はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. MVCCと肥大化の原因
  2. VACUUM、autovacuum、vacuum_cost_delay
  3. ANALYZEとpg_statistic
  4. インデックスオンリースキャンとVisibility Map
← SQL Academyに戻る