[pgsql-jp: 30036] 「vacuum」と「analyze」と「vacuum analyze」と「vacuum full」の違いについて
Iso, Toshitaka
toshitaka.iso @ hp.com
2003年 5月 23日 (金) 16:03:17 JST
お世話になります。
VacuumとAnalyze、Vacuum Analyzeの違いについてお教え下さい。
【PostgreSQLのバージョン=7.2.1】
あるテーブル(データ件数=9万件ほど)があります。
このテーブル構造は以下のような感じで、lockkbnとlocknoで
Primary Keyとなっております。
lockkbn | character(4) | not null
lockno | character varying(40) | not null
lockcndtn | character(1) |
lockstrtdt | timestamp with time zone |
lockenddt | timestamp with time zone |
しばらくの間はlockkbnとlockcndtnで検索を行うと、
Primary keyを使用してIndex Scanが走っていたのですが、
データ件数が増えるにつれSeq Scanが走るようになりました。
ここで、不要レコードを削除し、vacuum analyzeをかけるという
ことになったのですが、
select * from pg_class where relname='tbl_hoge'
のreltupleの値がcount(*)で検索した際のレコード件数と
違い膨大な数をもっており相変わらずSeq Scanでした。
## vacuum analyze後の結果
実際のレコード件数=129件
reltupleの値=89762(単位は「件」?)
ところが、analyzeだけを実行したところ、
pg_classの当該テーブルのreltuple値がDeleteしたテーブルの
レコード件数と一致し、Index Scanをしてくれるようになりました。
## analyze後の結果
実際のレコード件数=129件
reltupleの値=129(単位は「件」?)
長々書きましたがここで質問です。
「vacuum」と「analyze」と「vacuum analyze」と「vacuum full」の違いについて
確認させてください。
私の認識とマニュアルで確認結果です。
【vacuum】
削除済みレコードを空き領域にする。統計情報は更新しない。
【analyze】
統計情報の更新。削除済みレコードの空き領域処理はしない。
【Vacuum Analyze】
VacuumとAnalyzeを実行?
(実際は統計情報は更新されていませんでした)
【Vacuum full】
空きデータ領域をデフラグ?
上記認識に間違いがあればご指摘いただけないでしょうか?
現状はVacuum analyzeを1日一回、analyzeのみを1日一回
実行しています。
以上です。
pgsql-jp メーリングリストの案内