5.5 バキューム処理

以下を確認します。

  • vacuumdbコマンド

vacuumdbコマンド

prod表を更新後、vacuumdbコマンドでバキューム処理を行います。

[postgres@host1 ~]$ psql -c 'UPDATE prod SET price = price+2;' ossdb
UPDATE 4
[postgres@host1 ~]$ vacuumdb -v -t prod ossdb ※1回目のvacuumdb
vacuumdb: データベース"ossdb"をVACUUMしています
INFO:  "public.prod"に対してVACUUMを実行しています
INFO:  "prod": 全 1 ページ中の 1 ページで見つかった行バージョン: 削除可能 4 行、削除不可 4 行
DETAIL:  0 個の不要な行バージョンがまだ削除できません、最古のxmin: 851
0個の使われていないアイテム識別子がありました。
バッファピンのため0ページが、凍結のため0ページがスキップされました。
0ページが完全に空です。
CPU: ユーザ: 0.00秒、システム: 0.00秒、経過時間: 0.00秒。
INFO:  "pg_toast.pg_toast_25050"に対してVACUUMを実行しています
INFO:  "pg_toast_25050": 全 0 ページ中の 0 ページで見つかった行バージョン: 削除可能 0 行、削除不可 0 行
DETAIL:  0 個の不要な行バージョンがまだ削除できません、最古のxmin: 851
0個の使われていないアイテム識別子がありました。
バッファピンのため0ページが、凍結のため0ページがスキップされました。
0ページが完全に空です。
CPU: ユーザ: 0.00秒、システム: 0.00秒、経過時間: 0.00秒。
[postgres@host1 ~]$ vacuumdb -v -t prod ossdb ※2回目のvacuumdb
vacuumdb: データベース"ossdb"をVACUUMしています
INFO:  "public.prod"に対してVACUUMを実行しています
INFO:  "prod": 全 1 ページ中の 1 ページで見つかった行バージョン: 削除可能 0 行、削除不可 4 行
DETAIL:  0 個の不要な行バージョンがまだ削除できません、最古のxmin: 851
0個の使われていないアイテム識別子がありました。
バッファピンのため0ページが、凍結のため0ページがスキップされました。
0ページが完全に空です。
CPU: ユーザ: 0.00秒、システム: 0.00秒、経過時間: 0.00秒。
INFO:  "pg_toast.pg_toast_25050"に対してVACUUMを実行しています
INFO:  "pg_toast_25050": 全 0 ページ中の 0 ページで見つかった行バージョン: 削除可能 0 行、削除不可 0 行
DETAIL:  0 個の不要な行バージョンがまだ削除できません、最古のxmin: 851
0個の使われていないアイテム識別子がありました。
バッファピンのため0ページが、凍結のため0ページがスキップされました。
0ページが完全に空です。
CPU: ユーザ: 0.00秒、システム: 0.00秒、経過時間: 0.00秒。
[postgres@host1 ~]$

まず、psqlコマンドでUPDATE文を実行してprod表の4つの行を更新します。続いて、vacuumdbコマンドでprod表のバキューム処理を行います。その結果、削除可能な空きスペースが 4 行存在していたことが表示されます。再度vacuumdbコマンドを実行すると削除可能な空きスペースの表示が 0 行となり、1回目のvacuumdbコマンドで空きスペースが回収されていたことが確認できます。