Postgresqlでディスクスペースがいっぱいになった場合の対処


14

postgresql 9.3.10バックエンド(Linux OSに搭載)を備えたDjango Webアプリケーションがあります。ディスクがいっぱいになったエラーが発生したため、テーブルを切り捨てようとしても、次のようなエラーが発生します。

ERROR:  could not extend file "base/30137/33186048": No space left on device
HINT:  Check free disk space.

サーバーにディスクスペースを簡単に追加することも、このVM上のものを削除することもできません。ただし、切り捨ての候補となるいくつかのテーブルがありますが、今はそれらを切り捨てることもできないようです。

誰も私がここでできることについてアドバイスをくれますか?これは本番サーバーに大きな打撃を与えており、私はここで少し偶然のDBAをしているので、まったく困惑しています。


(一時的に)インデックスを削除できる場合は、一部のスペースを再利用できます...テーブルを切り捨ててから再作成します
-joanolo

回答:


9

PostgreSQLはテーブルに変更を加える前にWALを書き込む必要があるため、物を削除してより多くのディスクスペースを解放するために空きディスクスペースが必要です。

ディスクがいっぱいになると、PostgreSQL内から回復できなくなります。それでもTRUNCATEWALに書き込む必要があります。

したがって、ボリュームの一部のスペースを解放するか、ボリュームを拡張する必要あります。PostgreSQLログファイルがpg_logデータディレクトリにある場合、それらの一部を安全に削除してPgを再起動できます。

またはを削除しないでください。これらはサーバーエラーログではなく、データベース、トランザクションログ、およびコミットログの重要な部分です。pg_xlogpg_clog


なぜTRUNCATEwalに書き込む必要があり、WALのそのエントリはどのように見えますか?
エヴァンキャロル

「切り捨ては完全なデータを記録せず、切り捨てが発生したという事実のみを記録します。それをロールバックできるようにするために、基になるファイルはトランザクションがコミットされるまで保持されます。」[ソース](postgresql.org/message-id/...。。壁にTRUNCATEのエントリは、超小型であるので単なるバイトであれば必要なスペース負荷の全体だった、あなたはおそらくによってそれを得ることができるrm -rf /tmp/*か、あなたのvimrcを削除。
エヴァンキャロル

@EvanCarroll rm -rf /tmp/*...アプリケーションソケットなど、必要なものも削除できます。より選択的にする方が良いでしょう。必要なスペースについては、あなたは正しいです、それは最小限です-8kの空のテーブル+切り捨て、xidの割り当て、コミットレコードなどのための数KBのWALエントリ
クレイグリンガー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.