私は1つのシナリオを経験しているだけで、問題の手がかりがまったく得られていません。
名前というテーブルが1つあります(名前と時間の列があります)。このテーブルは、毎分多数の行が挿入されています。そして、これらの挿入されたレコードは、特定の時間間隔で削除されます。それで、最終的にデータの挿入を停止し、テーブルからすべての行を削除しました。
私のデータベースバージョンの詳細
impss=# SELECT version();
version
----------------------------------------------------------------------------------------------
PostgreSQL 8.3.7 on i486-pc-linux-gnu, compiled by GCC gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2
(1 row)
しかし、テーブルのサイズを見つけるためのクエリを発行すると、まだある程度のサイズが得られます。
impss=# SELECT pg_size_pretty( pg_total_relation_size('names')) ;
pg_size_pretty
----------------
1504 kB
(1 row)
最初の質問は、テーブルからすべてのレコードを削除したのに、なぜそれでもある程度のサイズが表示されるのですか。
最後の自動真空がいつ行われたかを見つけるために、私は次のクエリを発行しました:
現在の時刻は
impss=# select now();
now
----------------------------------
2012-11-08 20:21:10.550434+05:30
(1 row)
impss=# SELECT last_autovacuum from pg_stat_user_tables where relname='names';
last_autovacuum
----------------------------------
2012-11-08 17:51:31.995618+05:30
2番目の質問:データベースがビジー状態ではなく、このテーブルへのすべてのトランザクションをすでに停止しているにもかかわらず、この時間以降に自動バキュームプロセスが実行されなかったのはなぜですか。
したがって、レコードが削除されたときにすべてのスペースを取り戻すことができるように、頻繁にバキュームを実行するために特定の構成を行う必要があるかどうかを教えてください。