Postgresql

如何限制 pg_dump 使用的資源?

  • December 6, 2017

是否可以限制使用的系統資源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允許使用的資源?我不介意備份是否較慢。只是不要在作業系統必須開始殺死程序的情況下執行系統資源。

我的假設是 RAM 不是你的問題。但是你被 IO 困住了,以至於你不能像從數據庫中讀取一樣快地寫入文件。

這裡沒有解決方案,pg_dump讓它盡可能快地工作。如果它讀取數據的速度快於寫入數據的速度,那麼您的記憶體使用量可能會上升。直到表刷新到磁碟。您可能想要啟用壓縮,查看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,直到它開始分頁,然後再繼續。

引用自:https://dba.stackexchange.com/questions/192543