繁体   English   中英

将 PostgreSQL pg_restore 性能从 130 小时提高

[英]Improve PostgreSQL pg_restore Performance from 130 hours

我正在尝试缩短使用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 个虚拟 CPU、2 GB 内存、4 GB 交换
  • 500 GB ZFS(2 路镜像阵列)
  • PostgreSQL 11.6
  • 时间刻度数据库 1.60

执行恢复所采取的步骤:

  1. 将 .gz 文件解压到/var/lib/postgresql/backups/backup_2020-02-29 (约 40 分钟)

  2. 修改postgresql.conf设置

work_mem = 32MB
shared_buffers = 1GB            
maintenance_work_mem = 1GB      
full_page_writes = off
autovacuum = off
wal_buffers = -1
  1. pg_ctl restart

  2. 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();

您的数据库系统受 I/O 限制,正如您从%iowait值 63.62 中看到的那样。

增加maintenance_work_mem可能会稍微改善这种情况,但本质上您需要更快的存储。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM