Postgresql
如何限制 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
允許使用的資源?我不介意備份是否較慢。只是不要在作業系統必須開始殺死程序的情況下執行系統資源。
我的假設是 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,直到它開始分頁,然後再繼續。