プロが教えるわが家の防犯対策術!

LinuxでPostgreSQL 8.1.11を運用しています。24時間運用なので、VACUUM FULLはせずに毎日深夜にVACUUM ANALYZEを実行しています。
insert,update,deleteが頻繁に起こるシステムです。

VACUUM FULLを実行した場合、どの程度領域を回収できるのかを見積もろうとしています。

現在のデータサイズとOS上の使用容量の差分がわかれば、VACUUM FULLで回収できる領域が見積もれると考えているのですが、データサイズの確認方法がわかりません。
次のような計算でしかわからないでしょうか?
(1行のサイズ×行数)×全テーブル

上のような計算の場合でも、textのような場合は、サイズが行ごとに異なりそうな気がします。データサイズを確認する方法はありませんでしょうか?

A 回答 (2件)

一番簡単なのは VACUUM FULL を実際に実行し、その前後のサイズを比較することですね。



VACUUM FULL を実行せずに確認するなら、どの程度の精度で見積もるかによって異なりますが、内部的なこと (8kB のブロック単位にディスクに格納されるとか、ブロックやタプルのヘッダーサイズなど) を知っていないと難しいです。

ヒントとしては、テーブルの行数は pg_class テーブルの reltuples 列、テーブルに定義された列の値の平均サイズは pg_class テーブルの avg_width 列、null の割合は null_frac 列に統計情報 (正確な値ではない) として格納されています。これらの値をもとに計算すればある程度の精度で有効な行以外によって占められてる割合を求めることができます。

こういった計算をするのが面倒なら、contrib モジュールの pgstattuple を使うのがいいと思います (参考 URL)。pgstattuple を使えば有効でない行や空き領域の割合、サイズを調べることができます。

参考URL:http://www.postgresql.jp/document/8.4/html/pgsta …
    • good
    • 0

はじめまして、通りすがると申します。



 VACUUM ANALYZEを実行してどれぐらい空くかは実際やってみないと解らないと思います。
 ただ、予測のための計算は上記方法ではできません。
 計算の説明をするとA4横の用紙にざっと9枚程度の資料になってしまいます。

 計算の参考資料としましては、以下のサイトなんかは参考になると思います。

 http://www2b.biglobe.ne.jp/~caco/webdb-pdfs/vol2 …

 この計算式を元に、ディスクへのロード率を調整して、実際の容量と比較検証を行い、
 最も近い値を導きだしたものが、自分の環境に合った計算式になると思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す