从130个小时开始改善PostgreSQL pg_restore性能

问题描述 投票:0回答:1

我正在尝试缩短使用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使用率仍然很低。

enter image description here

磁盘写速度和IOPS也很低:

enter image description hereenter image description here

[使用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
  • 执行还原所采取的步骤:

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

  2. 修改postgresql.conf设置

  3. 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中运行以下命令:

  3. 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 ...

database postgresql backup pg-restore timescaledb
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.