私は開発システムで作業しており、開発目的で使用している「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」コマンドが発行された後、何が残っているのか誰かが何か知っていますか?
Sudo lsof| grep deleted
を試して、PostgreSQLプロセスが表示されるかどうかを確認します。このコマンドは、削除されたファイルを探しますが、そのファイル記述子はまだどのプロセスでも開いています。もう1つの副作用は、df -h
とdu -sh /
が異なることです。これは、du
がファイルシステムを調べてすべてのファイルのサイズを合計し、df
が物理デバイスを調べるためです。
DROP table
の後にスペースを解放しないデータベースの問題が発生しました。それが原因でした。
私が知っている唯一の解決策は、データベースを再起動することです。おそらく、リロード(SIGHUP)を送信してみてください。
私の理解では、データベースを削除すると、データベースとそのファイルは消えてしまいます。
テーブルスペースを使用している場合を除き、各データベースのデータは$ 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
ディスク領域がどこに向かっているのかを理解するために.