Postgresql
Postgresql 13 - 將 pg_dump 加速到 5 分鐘而不是 70 分鐘
我們每晚使用 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