我正在尝试缩短使用pg_restore
还原PostgreSQL数据库备份所花费的时间。使用管道pg_dump -Z0 -Fc
中的pigz
从380 GB PostgreSQL数据库创建29 GB gzip压缩的备份文件。
pg_restore
期间,使用SELECT pg_size_pretty(pg_database_size())
查询估计数据库大小以50 MB /分钟的速率增加。以这种速度,大约需要130个小时才能完成还原,这是一个非常长的时间。
在进一步调查中,尽管将pg_restore
设置为使用4个工作器,但CPU使用率仍然很低。
磁盘写速度和IOPS也很低:
[使用fio
对系统IO进行基准测试表明,它可以执行300 MB / s的写入和2000 IOPS,因此我们仅利用了大约20%的潜在IO功能。
有什么方法可以加快数据库还原速度?
系统
执行还原所采取的步骤:
将.gz文件解压缩到/var/lib/postgresql/backups/backup_2020-02-29
(〜40分钟)
修改postgresql.conf
设置
work_mem = 32MB
shared_buffers = 1GB
maintenance_work_mem = 1GB
full_page_writes = off
autovacuum = off
wal_buffers = -1
pg_ctl restart
在psql
中运行以下命令:
CREATE DATABASE database_development;
\c database_development
CREATE EXTENSION timescaledb;
SELECT timescaledb_pre_restore();
\! time pg_restore -j 4 -Fc -d database_development /var/lib/postgresql/backups/backup_2020-02-29
SELECT timescaledb_post_restore();
我正在尝试缩短使用pg_restore还原PostgreSQL数据库备份所花费的时间。使用pg_dump -Z0 -Fc ...