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
以上