2

約 80 GB のデータを使用して、postgres に一括コピーを実行しています。

\copy my_table FROM '/path/csv_file.csv' csv DELIMITER ','

トランザクションがコミットされる前に、次のエラーが発生します。

サーバーが予期せず接続を閉じました これはおそらく、リクエストの処理前または処理中にサーバーが異常終了したことを意味します。

PostgreSQL ログ:

LOG:server process (PID 21122) was terminated by signal 9: Killed
LOG:terminating any other active server processes
WARNING:terminating connection because of crash of another server process
DETAIL:The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.
HINT: In a moment you should be able to reconnect to the database and repeat your command. 
4

1 に答える 1

13

バックエンド プロセスがシグナル 9 ( SIGKILL) を受信して​​います。これは、次の場合に発生する可能性があります。

  • kill -9誰かが手動で送信します。
  • cron ジョブは、特定の状況下で送信するように設定されていますkill -9(非常に安全ではありません。これは行わないでください)。また
  • Linux のメモリ不足 (OOM) キラーがプロセスをトリガーして終了します。

後者の場合、カーネルのdmesg出力に OOM キラー アクティビティのレポートが表示されます。これがあなたのケースで見られるものだと思います。

PostgreSQL サーバーは、OOM キラーが実行されず、PostgreSQL がメモリ不足の状態を自動的に処理できるように、仮想メモリのオーバーコミットなしで構成する必要があります。Linux メモリのオーバーコミットに関する PostgreSQL のドキュメントを参照してください。

「なぜこれがそんなに多くのメモリを使用するのか」という別の質問が残っています。これに答えるには、セットアップに関するより多くの知識が必要です: サーバーに搭載されている RAM の量、空き容量、work_memおよび設定内容など。現在の PostgreSQL 8.4 にアップグレードするmaintenance_work_memまで、これを調べるのはあまり興味深い問題ではありません。パッチをリリースして、問題がすでに修正されていないことを確認してください。

于 2013-05-08T00:12:59.707 に答える