web-dev-qa-db-ja.com

pg_dumpが使用するリソースを制限するにはどうすればよいですか?

pg_dumpが使用するシステムリソースを制限することはできますか?

PostgreSQLデータベースを使用する、かなりのリソースを消費するサーバーがあります。 FreeBSD 10.2で実行されています。サーバーのメモリは8 GBです。

次のコマンドでバックアップを実行しています。

pg_dump -h <address> -U <user> -Fc <database> -f <location>

バックアップが完了すると、関連するpostgresプロセスのメモリ使用量が増加し続けます。そのプロセスだけで2.2 GBに達します。この時点で、メモリはすべて使い尽くされており、FreeBSDはプロセスの強制終了を開始します。

バックアップの方法を変更しようとしました。たとえば、複数のジョブを使用してみました(したがって、形式をディレクトリに変更しました)。

pg_dump -j 4 -h <address> -U <user> -Fd <database> -f <location>

違いはありません。最終的に、メモリ使用量は上限に達し、FreeBSDは(他のプロセスの中でも)データベースバックアップを強制終了します。

また、いくつかのシステム変数を調整してみました。 カーネルリソースの管理リソースの消費 がありました。これらは、サーバーが使用している実行中のpostgresプロセスに影響を与えましたが、pg_dumpが使用するプロセスには影響がありませんでした。 FreeBSDがプロセスの強制終了を開始する前に、それでも2.2 GBに増加しました。

pg_dump のマニュアルを読みましたが、複数のジョブ以外に役立つものは何も見ていません。

現時点では、どうすればよいかわかりません。 pg_dumpが使用を許可されているリソースを制限する方法はありますか?バックアップが遅くてもかまいません。 OSがプロセスの強制終了を開始する必要があるリソースが不足した状態でシステムを実行しないでください。

1
quickblueblur

私の仮定は、RAMは問題ではありませんが、データベースから読み取ることができるほど迅速にファイルに書き込むことができないほどIOの限界に達していることです。

ここには解決策はありません。pg_dumpは、できる限り速く機能するようになっています。書き込みよりも速くデータを読み取ることができる場合は、RAMの使用量が増える可能性があります。テーブルがディスクにフラッシュされるまで。圧縮を有効にすることができます。man psqlを参照して-Zを探してください。

   -Z 0..9
   --compress=0..9
       Specify the compression level to use. Zero means no compression. For the custom archive format, this specifies compression of individual table-data
       segments, and the default is to compress at a moderate level. For plain text output, setting a nonzero compression level causes the entire output file
       to be compressed, as though it had been fed through gzip; but the default is not to compress. The tar archive format currently does not support
       compression at all.

私の知る限り、プロセスは、システムに搭載されているRAMの量や、システムが使用する必要がある量を認識していません。通常、制限を設定すると、ここで発生したことが行われ、プロセスが強制終了されます。プロセスを強制終了しなかった場合、ページングが開始されるまでRAMを飲み続け、その後はプロセスを続行する可能性があります。

1
Evan Carroll