Postgresql 13 - 将 pg_dump 速度从 70 分钟缩短至 5 分钟

Postgresql 13 - 将 pg_dump 速度从 70 分钟缩短至 5 分钟

我们每晚都会使用 pg_dump 来制作数据库快照。我们用一个简单的命令做了很长时间

pg_dump -Fc database_name

这大约需要一个小时并生成一个30+GByte的文件。

我们如何才能加快进程?

答案1

我们最大的表以列的形式包含原始图像数据bytea

当我们从 psql 对该表执行简单的 COPY 操作时stdout,速度非常快(1 或 2 分钟),但使用 pg_dump 时速度非常慢。耗时约 60 分钟。

所以在调查这件事时,我偶然发现了这个讨论。如果数据已经压缩,pg_dump 压缩似乎会相当慢,就像字节格式的图像数据一样。最好在 pg_dump 之外进行压缩(-Z0)。

此外,我们发现我们可以利用多核 CPU(-j 10和 pigz-p 10使用 10 个核心。您可以选择不同数量的核心)。

所以现在我们这样做:

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

时间从约 70 分钟缩短至约 5 分钟。相当惊人。

您可以像这样恢复它:

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

相关内容