2009-09-04 12 views
0

私は「少し」問題があります。一週間前に私のデータベースは完全なディスク容量に達していました。私はディスクスペースを解放しようとしている別のテーブルの多くの行を削除しました。私は完全な真空を実行しようとした後、完了していない。postgreSQL vacuum tempファイル?

私が知りたいことは何ですか。私が完全に納得してから真空を止めたとき、私は手動で削除しなければならないディスクに一時ファイルを残しますか? 私は今、100%ディスクの能力を持っているデータベースを持っていますが、言うまでもなく大きな問題です。

ディスクスペースを解放するためのヒントはありますか?

私はSUSEをPostgres 8.1.4データベースで実行しています。すべての

答えて

4

まず:

UPGRADE

あなたは8.2、8.3または8.4にすることができない場合であっても - 少なくとも、最新の8.1にアップグレードする(現時点では8.1.17ですが、8.1になります1〜2日で0.18)。

2番目:問題が何かを診断します。

duツールを使用して、正確にどこに行ったのかを診断します。あまりにも多くのスペースを占めているディレクトリは何ですか?

dfで確認してください、そして、PostgreSQLディレクトリの容量を確認してください。あなたはそれについて何かを行うことができますスペースを使用しているPGDATA内のどのディレクトリ知っていることを、今

cd YOUR_PGDATA_DIR 
du -sk * 
cd base 
du -sk * 
cd LARGEST DIR FROM PREVIOUS COMMAND 
du -sk * | sort -nr | head 

最良のオプションは、にあります。

ログまたはpg_tempの場合 - pgを再起動するかログを削除します(pg_clogとpg_xlogは共通の意味のログではありませんが、そこから何も削除しないでください)。

それは、その後、あなたのベースディレクトリで何かだ場合:ベースディレクトリ内

数値のディレクトリデータベースに関連しています。あなたは宇宙のほとんどを使用しているデータベースは、それに接続知っているとき

select oid, datname from pg_database; 

、およびスペースのほとんどを使用しているファイルを確認してください:あなたはでそれを確認することができます。

ファイル名は、オプションの「.digits」サフィックスを持つ数値になります - この接尾辞は(今のところ)は無関係であり、あなたは、ファイルを発行することによって表して正確に何をチェックすることができます

select relname from pg_class where relfilenode = <NUMBER_FROM_FILE_NAME>; 

あなたはどのテーブルを知っていたら、 /索引は大部分のスペースを使用します.VACUUM FULLを実行するか、またはCLUSTERコマンドを(もっとうまくいって)発行してください。

+0

返信いただきありがとうございます!私の問題は、ディスクが100%いっぱいであることです。バキュームとクラスタリングには、実行するための空きディスク領域が必要です。 vacuum/clusterを実行しないでDBからデータを完全に削除することは可能ですか? – jorgen

+0

あなたが犠牲にすることができるテーブルを見つけ出し、それをTRUNCATEします。すぐにスペースを解放します。 –

+0

ありがとうございました! – jorgen

1

問題の新しい接線では、queryを使用して、データベースで何が空き領域を多く使用しているかを調べることができます。これは、削除された情報を持つものをクリーンアップするのに十分な作業スペースを再利用するために、候補者をTRUNCATEに配置するのに役立ちます。

多くの行を削除しますが、ディスク容量を十分に確保するために十分頻繁にVACUUMを行わないと、索引の膨張という条件が発生することがありますが、VACUUM FULLはまったく役に立ちません。私が提案したクエリが、あなたのスペースの大部分が通常のテーブルではなくインデックスによって占められていることが示されたときに、そこにいることがわかります。この問題から回復するためには、すべてを再構築するためにテーブル自体と同じだけの空きディスク容量が必要なCLUSTERが必要です。

関連する問題