web-dev-qa-db-ja.com

データベースを削除した後のディスク領域の解放

私は開発システムで作業しており、開発目的で使用している「foo」などのデータベースに復元しています。私が問題を解決している間、私はDROP DATABASE fooを実行しています。しかし、私はすぐにディスク上のすべての領域を使い果たしたことに気付きました。くだらない。

別の論理データベースのVACUUM FULLは、以前に削除したデータベース(foo)からスペースを解放しますか?別の論理データベースからこれを試してみたところ、空き領域が回収されましたが、行ったすべてのCREATE DATABASE/DROP DATABASE呼び出しを説明するのに十分だとは思いませんでした。実行元の論理データベースにVACUUMを実行しただけかもしれません。

データベース全体を初期化せずにそのスペースを再利用する方法があるはずです。

[〜#〜]編集[〜#〜]

それで、おおよそ これらのステップ に従って、バックアップからデータベースを再初期化しました。復元後、ディスク上の大量のスペースを取り戻しました!これは今のところ機能しますが、削除されたデータベースをクリーンアップする方法に関するヘルプは引き続き役に立ちます。

編集2

だから私はこの問題についてさらにいくつかの情報を収集することができました...例として私が思いついたものは次のとおりです:

Initial partition size:
                       Size   Used  Avail Use% Mounted on
                        25G   8.1G    16G  35% /apps1

After creating my new database and populating it:
                        25G    18G   6.4G  73% /apps1

After Dropping the database using "DROP database mydb" from a separate logical DB:
                        25G    13G    11G  56% /apps1

したがって、新しいDBはディスク上で最大9.6 GBを消費しているように見えます。ただし、それを削除した後、再生されたディスク領域は〜4.6Gだけ増加しました。 つまり、約5 GBの領域があり、どうなっているのだろうと思います!?

そして、私が再作成し、データを追加し、再びドロップすると、このサイクルが続きます。

「DROP DATABASE」コマンドが発行された後、何が残っているのか誰かが何か知っていますか?

12
Jmoney38

Sudo lsof| grep deletedを試して、PostgreSQLプロセスが表示されるかどうかを確認します。このコマンドは、削除されたファイルを探しますが、そのファイル記述子はまだどのプロセスでも開いています。もう1つの副作用は、df -hdu -sh /が異なることです。これは、duがファイルシステムを調べてすべてのファイルのサイズを合計し、dfが物理デバイスを調べるためです。

DROP tableの後にスペースを解放しないデータベースの問題が発生しました。それが原因でした。

私が知っている唯一の解決策は、データベースを再起動することです。おそらく、リロード(SIGHUP)を送信してみてください。

6
charli

私の理解では、データベースを削除すると、データベースとそのファイルは消えてしまいます。

テーブルスペースを使用している場合を除き、各データベースのデータは$ PGDATA/baseの下の独自のサブディレクトリにある必要があります。例として私のサーバーの1つを使用(postgresユーザーとして):

-bash-3.2$ cd $PGDATA/base

-bash-3.2$ ls | wc -l
9

-bash-3.2$ du -sh `ls`
6.9M    1
6.7M    12690
6.9M    12698
11M     16391
341M    17339
3.8G    17341
11M     17343
6.8M    19047
8.0K    pgsql_tmp

ここで、新しいデータベースを作成すると、$ PGDATA/baseの下にもう1つのサブディレクトリがあるはずです。

-bash-3.2$ createdb foo

-bash-3.2$ ls | wc -l
10

-bash-3.2$ du -sh `ls`
6.9M    1
6.7M    12690
6.9M    12698
11M     16391
341M    17339
3.8G    17341
11M     17343
6.8M    19047
6.9M    83637
8.0K    pgsql_tmp

これが表示されているものです($ PGDATA/base/83637は新しいデータベースのサブディレクトリです)。

そのデータベースを削除すると、データファイルも削除されます。

-bash-3.2$ dropdb foo

-bash-3.2$ ls wc -l
9

-bash-3.2$ du -sh `ls`
6.9M    1
6.7M    12690
6.9M    12698
11M     16391
341M    17339
3.8G    17341
11M     17343
6.8M    19047
8.0K    pgsql_tmp

これは私たちが期待することです-$ PGDATA/base/83637ディレクトリがなくなったので、何も掃除する必要はありません。

他にディスク容量を消費しているものはないと確信していますか?他のデータベースの1つですか?ログファイル?

あなたが試すことができる何かは次のようになります:

-bash-3.2$ cd $PGDATA
-bash-3.2$ du -sh `ls` > ../pre_sizes

さまざまなデータベースに関することを行って、作成、ドロップなどを行い、次に:

-bash-3.2$ du -sh `ls` > ../post_sizes

ディスク領域がどこに向かっているのかを理解するために.

5
gsiems