[英]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 功能。
有什么辦法可以加快數據庫恢復?
系統
執行恢復所采取的步驟:
將 .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();
您的數據庫系統受 I/O 限制,正如您從%iowait
值 63.62 中看到的那樣。
增加maintenance_work_mem
可能會稍微改善這種情況,但本質上您需要更快的存儲。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.