postgresql:恢复数据库备份非常慢,已用资源未得到充分利用
postgresql: Restoring database backup is very slow and used resources are underutilized significantly
我正在尝试在我的个人计算机上恢复 postgresql 数据库的备份。我的 OS 是 Ubuntu 18,我使用 14 版本的 postgresql。 .sql 文件的体积是 52G,但在等待 6 小时后,目标数据库的体积仅增加到 120 MB。然后我更改了我默认的一些参数 postgres.conf:
work_mem = 32MB
shared_buffers = 4GB
maintenance_work_mem = 2GB
full_page_writes = off
autovacuum = off
wal_buffers = -1
但速度基本保持不变。 INSERT 期间的资源利用率如下:
- CPU < 7% (ps -aux)
- 内存 < 0.5%(ps -aux)
- 磁盘写入速度<1000K/S(iotop,dd达到80多MB/s)
提前谢谢你。
这里使用的命令是 sudo -u postgres psql lom < psql_long_small_dump
psql
将在单个线程中恢复转储(大多数情况下,CREATE INDEX
可以并行化),因此您不会以这种方式耗尽资源。如果使用自定义格式转储 (pg_dump -F c
),您会更幸运,您可以使用 pg_restore -j 4
左右在多个线程中恢复它。
您更改的参数似乎是随机的。要尽可能加快当前的恢复过程,请设置以下内容:
wal_level = minimal # requires a restart
maintenance_work_mem = 2GB
max_wal_size = 20GB # as big as you want
并使用 psql -1
恢复,以便所有内容都在单个事务中运行。
我正在尝试在我的个人计算机上恢复 postgresql 数据库的备份。我的 OS 是 Ubuntu 18,我使用 14 版本的 postgresql。 .sql 文件的体积是 52G,但在等待 6 小时后,目标数据库的体积仅增加到 120 MB。然后我更改了我默认的一些参数 postgres.conf:
work_mem = 32MB
shared_buffers = 4GB
maintenance_work_mem = 2GB
full_page_writes = off
autovacuum = off
wal_buffers = -1
但速度基本保持不变。 INSERT 期间的资源利用率如下:
- CPU < 7% (ps -aux)
- 内存 < 0.5%(ps -aux)
- 磁盘写入速度<1000K/S(iotop,dd达到80多MB/s)
提前谢谢你。 这里使用的命令是 sudo -u postgres psql lom < psql_long_small_dump
psql
将在单个线程中恢复转储(大多数情况下,CREATE INDEX
可以并行化),因此您不会以这种方式耗尽资源。如果使用自定义格式转储 (pg_dump -F c
),您会更幸运,您可以使用 pg_restore -j 4
左右在多个线程中恢复它。
您更改的参数似乎是随机的。要尽可能加快当前的恢复过程,请设置以下内容:
wal_level = minimal # requires a restart
maintenance_work_mem = 2GB
max_wal_size = 20GB # as big as you want
并使用 psql -1
恢复,以便所有内容都在单个事务中运行。