Postgresql

Postgresql 13 - 將 pg_dump 加速到 5 分鐘而不是 70 分鐘

  • April 17, 2022

我們每晚使用 pg_dump 來製作我們數據庫的快照。我們用一個簡單的命令做了很長時間

pg_dump -Fc database_name

這大約需要一個小時並生成一個 30+GByte 的文件。

我們怎樣才能加快速度?

bytea我們最大的表以列的形式包含原始圖像數據。

當我們從這個表上的 psql 執行一個簡單的 COPY 到 時stdout,它非常快(1 或 2 分鐘),但是使用 pg_dump 非常慢。花了大約 60 分鐘。

所以調查這個我偶然發現了這個討論。如果數據已經像字節茶格式的圖像數據一樣被壓縮,那麼 pg_dump 壓縮會相當慢。最好在 pg_dump (-Z0) 之外進行壓縮。

此外,我們發現我們可以利用我們的多核 CPU(-j10 和 pigz)。所以現在我們這樣做:

$ pg_dump -Z0 -j 10 -Fd database_name -f dumpdir
$ tar -cf - dumpdir | pigz > dumpdir.tar.gz
$ rm dumpdir

時間已從約 70 分鐘降至約 5 分鐘。相當驚人。

您可以像這樣恢復它:

$ pigz -dc dumpdir.tar.gz | tar -C dumpdir --strip-components 1 -xf -
$ pg_restore -j 10 -Fd -O -d database_name dumpdir

引用自:https://serverfault.com/questions/1081642