dポイントプレゼントキャンペーン実施中!

PostgreSQL8.2シリーズを利用しています。
事情によりVacuumFullが行えないのですが、ここ最近、レスポンスの低下が顕著になってきました。

そこで現在のDB断片化の状況を知りたいと考えているのですが、何か方法はございますでしょうか?
もしご存知でしたら、ぜひアドバイスを頂ければと思います。

A 回答 (2件)

pg_class テーブルの relpages と reltuples の比を取ってみると参考になるかと。


例えば、1行当り1000Byte以上使っているテーブルを表示するには下記の様にします。

例) -------------------------------------
select
relname,
reltuples::int8,
relpages::int8,
CASE WHEN reltuples > 0
THEN (relpages::int8 * 8192) / reltuples::int
ELSE (relpages::int8 * 8192)
END as per_row
from pg_class
where
relkind = 'r' AND
relpages::int8 >= 2 AND
CASE
WHEN reltuples = 0 THEN TRUE
ELSE (relpages::int8 * 8192) / reltuples::int > 1000
END
order by per_row desc;
-----------------------------------------

1行分のデータが少ないはずの無いテーブルが含まれていたら、おそらく更新・削除による不要なデータが溜まっているのかと。

なお、ブロックサイズがデフォルト以外の場合は、8192を実際のブロックサイズに変えて下さい。
    • good
    • 1
この回答へのお礼

詳しくご回答頂きありがとうございます。
pg_class テーブルを活用して… と悩んでいたので、まさに!!な回答でした。
教えて頂いた情報を参考にもう少し詳しく調べてみたいと思います。
ありがとうございました!

お礼日時:2011/03/01 15:48
    • good
    • 0
この回答へのお礼

ご回答頂きありがとうございます。
こういったツールがあったのですね。とても参考になりました。
試しにテスト環境に導入してみたいと思います。

お礼日時:2011/03/01 15:49

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

このQ&Aを見た人はこんなQ&Aも見ています

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