[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 メーリングリストの案内