PostgreSQLスキルアップノート(自己啓発のための個人サイト)

バキューム・その2・操作編


【一覧に戻る】
マニュアルへのリンクは9.2としています。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■■■■ PostgreSQL スキルアップノート
■■■■
■◆■■ バキューム・操作編
■■■■
■■■■
■■■■ 2012/10/26
■■■■ 使用環境:PostgreSQL9.1.4 (CentOS6.2)
                                                                   (C) 2012 ohdb
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

【マニュアル】

・VACUUM概要   →●[マニュアル]
・vacuumdbコマンド →●[マニュアル]
・VACUUM文         →●[マニュアル]

【マニュアル参考】

・第18章サーバの設定・自動Vacuum作業→●[マニュアル]
・第18章サーバの設定・コストに基づくVacuum遅延  →●[マニュアル]


【その他】
 −



■1■ 標準VACUUM(コンカレントVACUUM)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

・不要領域回収(原則は物理サイズ縮小ではない。再利用マーク付けのみ)
・対象にインデックス含む
・一部(ALTER TABLE等)を除きSQL実行可能


★ここではvacuumdbコマンドのみを記載。(VACUUM文は略)

自動以外のバキューム運用を併用する際にシェルスクリプトなどに組み込んで使う
場合にはvacuumdbコマンドの方が便利。
業務のバッチ処理などから実行させるような用途にはVACUUM文が便利。
vacuumdbコマンドはVACUUM文のラッパなので動作は同じ。



1.全DB
──────────────────────────────

【□】 vacuumdb -a -z -v 

-a 全DB
-z アナライズも実行
-v 詳細表示


-Z(大文字)の場合はバキュームなしのアナライズができる。
-e 実行SQL(VACUUM文等)表示


2.DB指定
──────────────────────────────

【□】 vacuumdb -d test1 -z -v

-d dbname   対象DB


3.テーブル指定
──────────────────────────────

【□】 vacuumdb -d test1 -t table01 -z -v

-d dbname -t tablename とセットででテーブルを指定する。
-dの省略でも可能(後述)であるが、対象DBは明記するルールにした方が無難。




■2■ 標準VACUUMの実務想定コマンド
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

例)

自動バキューム運用は併用するとして、補完する目的で実行(毎日の夜間など)

 ・対象DBは   test1
 ・アナライズは  あり
 ・詳細記録の記録 あり   

【□】 vacuumdb -d test1 -z -v > logfile_vacuumdb.log 2>&1


・-eと-vを併用したいがログに記録した場合の順序がおかしくなる・・再確認




■3■ VACUUM FULL
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

全体への標準バキュームとVACUUM FULLを混同しないように。

【□】 vacuumdb -a -f -z -v           ・・・全DB
【□】 vacuumdb -d test1 -f -z -v     ・・・test1DBのみ




■4■ 覚え
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


-eオプションとは?
──────────────────────────────

-e:vacuumdbコマンドから実行するSQL文を表示する。
   たとえばカタログへのselectやvacuum;など
   このオプションによる発生ログ量は少ない。

-vによるメッセージは標準エラー出力であるが
-eによるメッセージは標準出力される。


[postgres@kvm00 ~]$ vacuumdb  -a -z -e
SELECT datname FROM pg_database WHERE datallowconn ORDER BY 1;
vacuumdb: vacuuming database "postgres"
VACUUM (ANALYZE);

vacuumdb: vacuuming database "template1"
VACUUM (ANALYZE);

vacuumdb: vacuuming database "test1"
VACUUM (ANALYZE);

vacuumdb: vacuuming database "test3"
VACUUM (ANALYZE);




VACUUM文の場合の実行方法は?
──────────────────────────────

・本ページでは記載省略、以下参照

→●[マニュアル]

vacuumdbコマンドはvacuumとanalyzeをまとめて1個のコマンドであるが、
SQL文の場合には、VACUUMN文とANALYZE文がある。

アナライズの有無と標準バキュームを中心に大別すると
それぞれの対応は以下の通り

VACUUM文           vacuumdb          内容   
--------------------------------------------------------------------
・VACUUM            vacuumdb         vacuumのみ         
・VACUUM ANALYZE    vacuumdb -z      vacuumとanalyze  
・ANALYZE           vacuumdb -Z      analyzeのみ      

この他VACUUM FULLなど


オプション等詳細はマニュアル参照。




対象DBの指定をしない(-dも-aもつけない)場合の対象は?
──────────────────────────────

・PGDATABASE環境変数があればそのDBのみが対象となる。
・なければ接続時に指定したユーザ名
 (となっているがpsqlのようにユーザ名と同じDBへの接続とはならなかった(不明)・・・)

[postgres@kvm00 ~]$ vacuumdb -d test1 -U test1 -v 2>&1 | grep tmp_now
INFO:  vacuuming "public.tmp_now_test1db"
INFO:  "tmp_now_test1db": found 0 removable, 0 nonremovable row versions in 0 out of 0 pages

[postgres@kvm00 ~]$ vacuumdb  -U test1 -v 2>&1 | grep tmp_now
INFO:  vacuuming "public.tmp_now_postgresdb"
INFO:  "tmp_now_postgresdb": found 0 removable, 0 nonremovable row versions in 0 out of 0 pages

[postgres@kvm00 ~]$ vacuumdb  -U test3 -v 2>&1 | grep tmp_now
WARNING:  skipping "tmp_now_postgresdb" --- only table or database owner can vacuum it







■4■メモ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


テーブルttttttttにupdateを12行×10回、かけてみる。

★の部分が再利用マークを付けた記録(だと思う)

UPDATE直後のVACUUM実行

[postgres@kvm00 ~]$ vacuumdb -d test1 -t tttttttt -z -v
INFO:  vacuuming "public.tttttttt"
INFO:  "tttttttt": ★found 120 removable, 12 nonremovable row versions in 1 out of 1 pages
DETAIL:  0 dead row versions cannot be removed yet.
There were 192 unused item pointers.
0 pages are entirely empty.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
INFO:  analyzing "public.tttttttt"
INFO:  "tttttttt": scanned 1 of 1 pages, containing 12 live rows and 0 dead rows; 12 rows in sample, 12 estimated total rows

もう一度VACUUM実行

[postgres@kvm00 ~]$ vacuumdb -d test1 -t tttttttt -z -v
INFO:  vacuuming "public.tttttttt"
INFO:  "tttttttt": ★found 0 removable, 12 nonremovable row versions in 1 out of 1 pages
DETAIL:  0 dead row versions cannot be removed yet.
There were 192 unused item pointers.
0 pages are entirely empty.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
INFO:  analyzing "public.tttttttt"
INFO:  "tttttttt": scanned 1 of 1 pages, containing 12 live rows and 0 dead rows; 12 rows in sample, 12 estimated total rows











以上 
inserted by FC2 system