【发布时间】:2020-03-01 17:34:52
【问题描述】:
我正在尝试缩短使用pg_restore 恢复 PostgreSQL 数据库备份所需的时间。 29 GB gzip 压缩备份文件是使用 pg_dump -Z0 -Fc 从 380 GB PostgreSQL 数据库创建的,并通过管道传输到 pigz。
在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 功能。
有什么方法可以加快数据库恢复速度?
系统
- Ubuntu 18.04.3
- 1 个 vCPU、2 GB RAM、4GB 交换
- 500 GB ZFS(2 路镜像阵列)
- PostgreSQL 11.6
- TimescaleDB 1.60
执行恢复的步骤:
将.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();
【问题讨论】:
标签: database postgresql backup pg-restore timescaledb