[pgsql-jp: 40773] Re: 【質問】baseフォルダ配下のファイル削除について
MauMau
maumau307 @ gmail.com
2011年 5月 13日 (金) 21:20:34 JST
はじめまして、村上さん。MauMauといいます。
From: "m.murakami" <m.murakami @ lightcafe.co.jp>
> はじめまして。村上と申します。
> 以下、長文となってしまいますが、ご容赦願います。
>
> PostgreSQLを使用していて、base配下に作成されているデータ(ファイル)の
> 削除について確認があります。
>
> ■問題点
> オブジェクトの削除(Drop tableなど)は正常に完了して
> vacuumフルを実行しましたが、base配下に作成されているデータ(ファイル)が
> 削除されません。(27GBほど)
>
>
> ・サイズが足りなかったせいか、あるテーブル、インデックスがロック状態となる
>
> ・実行中のセッションがないことを確認し、DBインスタンスを再起動し、ロック状態
>
> を解除。
>
> ・元々あった30GBのデータも、データ移行テストで不要になったため、DBユーザ
> (user)にて
> すべてのオブジェクトを削除(Drop table, indexなど)し、vacuumフルを実行。
> →使用サイズが50GBから27GBになった(5/11と5/13に実施)
> ★本来であれば、ここでpg_catalogなど管理系のデータファイル以外は削除される
>
> 認識です。
> (DBユーザ(user)が作成した、baseディレクトリ配下のデータファイルが削除さ
>
> れる認識)
>
> ■base配下のサイズ使用量
> 4.3M 1
> 4.3M 11510
> 4.4M 11511
> 27G 16384
> 4.0K pgsql_tmp
>
DROP TABLE/INDEXを実行したトランザクションをコミットした時点で、そのテーブルやインデックスのデータを格納していたファイルは削除されます。VACUUM FULLでファイルが削除されるわけではないです。
base/16384/に大きなファイルが残っているとのことですので、それらのファイルがどのテーブルやインデックスのためのファイルかを確認してみてください。そのためにはシステムカタログpg_databaseとpg_classを検索します。おそらく、何らかのテーブルやインデックスをDROPしていないものと思われます。
ちなみに、「ロック状態」というのはPostgreSQLのマニュアルに登場しないように思いますが、どのような状態のことでしょう?
pgsql-jp メーリングリストの案内