簡體   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