データベースを落とした後、ディスクスペースを解放します
-
22-10-2019 - |
質問
私は開発システムに取り組んでおり、「Foo」というデータベースに復元しており、開発の目的で使用しています。私はキンクスを介して作業しているので、ドロップデータベースfooを実行しています。しかし、私はすぐに自分のディスク上のすべてのスペースを食べたことに気付きました。くだらない。
別の論理データベースからVacuumはいっぱいになり、以前にドロップしたデータベースからスペースを解放しますか(foo)?私はこれを別の論理データベースから試しましたが、空き領域が再生されましたが、作成したすべての作成データベース/ドロップデータベース呼び出しを考慮するだけでは十分ではないと思います。私が実行した論理データベースを掃除機で掃除しただけかもしれません。
完全なデータベースinitを実行せずにそのスペースを取り戻す方法がなければなりませんか?
編集
だから私はバックアップからデータベースを再活性化し、ほぼフォローしています これらの手順. 。復元後、ディスク上の大量のスペースを取り戻しました!これは今のところ機能しますが、削除されたデータベースをクリーンアップする方法に関するヘルプは依然として役立ちます。
編集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のスペースがあります!?
そして、私が再現し、埋葬し、再びドロップするとき、それはこのサイクルを続けます。
「ドロップデータベース」コマンドが発行された後、何が残っているのか誰もが考えていますか?
正しい解決策はありません
他のヒント
試す sudo lsof| grep deleted
PostgreSQLプロセスが表示されるかどうかを確認します。このコマンドは、削除されたファイルを探しますが、そのファイル記述子はどのプロセスでも開いています。別の副作用はそれです df -h
と du -sh /
異なる。それの訳は du
ファイルシステムを見て、すべてのファイルのサイズを要約し、 df
物理デバイスを見てください。
私はデータベースに問題がありましたが、その後スペースを解放しませんでした DROP table
そしてそれが原因でした。
私が知っている唯一の解決策は、データベースを再起動することです。多分あなたはリロード(Sighup)を送ることができます。
私の理解では、データベースをドロップすると、ファイルがなくなっているということです。
テーブルスペースを使用している場合を除き、各データベースには、$ PGDATA/ベースの下の独自のサブディレクトリにデータが含まれている必要があります。例として私のサーバーの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/ベースの下にもう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
ディスクスペースがどこに向かっているのかを知るために。