PostgreSQL vacuum バキューム 再利用

PostgreSQL vacuum

  行を削除・更新した場合、その行をすぐに物理的に削除したり、更新するのではなく、
  その行に「削除マーク」を付け、更新の場合は新しい行を追加するという追加方式をとっている。

vacuum

  不要領域をチェックし、再利用するために FSM という共有メモリ上の領域に
  "場所"、"大きさ"を登録する。
  不要領域の物理的な削除は行なわない。

vacuum full

  不要領域の削除を行い、ディスク領域を回復させる。
  ただし、実行中はテーブルに排他ロックがかかり、アクセス不可になる。

データ追加時の流れ

  1. FSM が検索
    1-1. 適当な大きさの不要領域が見つかれば再利用
    1-2. FSM を使い切った場合など、領域が見つからなければ、新たにブロック格納
  2. 定期的にVACUUMを実行して、FSM に再利用領域の補充を行なう。

  ※1時間1回、または1日1回は行なうようにする。

試しに

  postgres=# vacuum verbose analyze bsc ;
  INFO:  vacuuming "public.bsc"
  INFO:  index "bsc_index" now contains 209507 row versions in 12474 pages
  DETAIL:  0 index pages have been deleted, 0 are currently reusable.
  CPU 0.31s/0.13u sec elapsed 0.43 sec.
  INFO:  index "bsc_tmp_pkey" now contains 209507 row versions in 1017 pages
  DETAIL:  0 index pages have been deleted, 0 are currently reusable.
  CPU 0.01s/0.00u sec elapsed 0.01 sec.
  INFO:  "bsc": found 0 removable, 209507 nonremovable row versions in 25278 pages
  DETAIL:  0 dead row versions cannot be removed yet.
  There were 166113 unused item pointers.
  0 pages are entirely empty.
  CPU 0.58s/0.20u sec elapsed 0.78 sec.
  INFO:  vacuuming "pg_toast.pg_toast_316024919"
  INFO:  index "pg_toast_316024919_index" now contains 0 row versions in 1 pages
  DETAIL:  0 index pages have been deleted, 0 are currently reusable.
  CPU 0.00s/0.00u sec elapsed 0.00 sec.
  INFO:  "pg_toast_316024919": found 0 removable, 0 nonremovable row versions in 0 pages
  DETAIL:  0 dead row versions cannot be removed yet.
  There were 0 unused item pointers.
  0 pages are entirely empty.
  CPU 0.00s/0.00u sec elapsed 0.00 sec.
  INFO:  analyzing "public.bsc"
  INFO:  "bsc": 25278 pages, 3000 rows sampled, 229961 estimated total rows
  VACUUM

  postgres=# select count(*) from bsc;
   count
  --------
   209507
  (1 row)

  postgres=# select relname, relfilenode, relpages
  postgres-# from pg_class
  postgres-# where relname like 'bsc';
   relname | relfilenode | relpages
  ---------+-------------+----------
   bsc     |   316024919 |    25278
  (1 row)

  postgres=# \! ls -l /var/base/316024797/316024919
  -rw-------    1 postgres   dba      207077376 Jul  5 14:04 /psgdata/base/316024797/316024919

ご訪問頂き有難う御座います。 当サイトを効率良く使うためにまずは FrontPage を見て下さい。 検索方法、一覧表示などの各情報を纏めています。
当サイトの説明 → Frontpage