適用於 PostgreSQL 的 Azure 資料庫 的pg_dump和pg_restore最佳做法 - 彈性伺服器
適用於: 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器
本文會檢閱加速pg_dump和pg_restore的選項和最佳做法。 它也說明執行pg_restore的最佳伺服器組態。
pg_dump的最佳做法
您可以使用 pg_dump 公用程式,將 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器資料庫擷取至腳本檔案或封存盤案。 下列各節列出一些可用來減少整體傾印時間的命令行選項pg_dump。
目錄格式(-Fd)
此選項會輸出目錄格式封存,您可以輸入至pg_restore。 根據預設,輸出會壓縮。
平行作業(-j)
透過pg_dump,您可以使用平行作業選項同時執行傾印作業。 此選項可減少傾印總時間,但會增加資料庫伺服器的負載。 建議您在密切監視來源伺服器計量之後到達平行作業值,例如 CPU、記憶體和 IOPS(每秒的輸入/輸出作業)使用量。
當您設定平行作業選項的值時,pg_dump需要下列專案:
- 聯機數目必須等於平行作業數目 +1,因此請務必據以設定
max_connections
值。 - 平行作業數目應該小於或等於為資料庫伺服器配置的 vCPU 數目。
壓縮(-Z0)
此選項會指定要使用的壓縮層級。 零表示沒有壓縮。 在pg_dump程序期間,零壓縮有助於提升效能。
數據表膨脹和真空
開始pg_dump程式之前,請先考慮是否需要數據表清理。 數據表上的膨脹大幅增加pg_dump次。 執行下列查詢來識別數據表膨脹:
select schemaname,relname,n_dead_tup,n_live_tup,round(n_dead_tup::float/n_live_tup::float*100) dead_pct,autovacuum_count,last_vacuum,last_autovacuum,last_autoanalyze,last_analyze from pg_stat_all_tables where n_live_tup >0;
dead_pct
相較於即時 Tuple,此查詢中的數據行是無效 Tuple 的百分比。 數據表的高 dead_pct
值可能表示數據表未正確清理。 如需詳細資訊,請參閱 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器中的自動數據清理微調。
針對您識別的每個資料表,您可以執行下列命令來執行手動真空分析:
vacuum(analyze, verbose) <table_name>
使用 PITR 伺服器
您可以在線上或即時伺服器上執行pg_dump。 即使正在使用資料庫,它也會進行一致的備份。 它不會封鎖其他使用者使用資料庫。 在開始pg_dump程式之前,請考慮資料庫大小和其他商務或客戶需求。 小型資料庫可能是在生產伺服器上執行pg_dump的好候選專案。
針對大型資料庫,您可以從生產伺服器建立時間點復原 (PITR) 伺服器,並在 PITR 伺服器上執行pg_dump程式。 在 PITR 上執行pg_dump是冷執行程式。 這種方法的取捨在於,您不會擔心在實際生產伺服器上執行pg_dump進程的額外 CPU、記憶體和 IO 使用率。 您可以在 PITR 伺服器上執行pg_dump,然後在完成pg_dump程式之後卸除 PITR 伺服器。
pg_dump語法
使用下列語法進行pg_dump:
pg_dump -h <hostname> -U <username> -d <databasename> -Fd -j <Num of parallel jobs> -Z0 -f sampledb_dir_format
pg_restore的最佳做法
您可以使用 pg_restore 公用程式,從pg_dump所建立的封存還原 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器資料庫。 下列各節列出一些減少整體還原時間的命令行選項。
平行還原
藉由使用多個並行作業,您可以減少在多虛擬核心目標伺服器上還原大型資料庫所需的時間。 作業數目可以等於或小於為目標伺服器配置的 vCPU 數目。
伺服器參數
如果您要將數據還原至新的伺服器或非生產伺服器,您可以在執行pg_restore之前,先優化下列伺服器參數:
work_mem
= 32 MB
max_wal_size
= 65536 (64 GB)
checkpoint_timeout
= 3600 #60min
maintenance_work_mem
= 2097151 (2 GB)
autovacuum
= off
wal_compression
= on
還原完成之後,請確定這些參數都會根據工作負載需求適當地更新。
注意
只有在有足夠的記憶體和磁碟空間時,才遵循上述建議。 如果您有具有 2、4 或 8 個虛擬核心的小型伺服器,請據以設定參數。
其他考量
- 在執行pg_restore之前,請先停用高可用性 (HA)。
- 分析還原完成之後移轉的所有數據表。
pg_restore語法
使用下列語法進行pg_restore:
pg_restore -h <hostname> -U <username> -d <db name> -Fd -j <NUM> -C <dump directory>
-Fd
:目錄格式。-j
:作業數目。-C
:使用建立資料庫本身的命令開始輸出,然後重新連線至其中。
以下是此語法顯示方式的範例:
pg_restore -h <hostname> -U <username> -j <Num of parallel jobs> -Fd -C -d <databasename> sampledb_dir_format
虛擬機考慮
在相同的區域和可用性區域中建立虛擬機,最好是您擁有目標和來源伺服器的位置。 或者,至少建立靠近來源伺服器或目標伺服器的虛擬機。 建議您搭配高效能本機 SSD 使用 Azure 虛擬機器。
如需 SKU 的詳細資訊,請參閱:
相關內容
- 設定 適用於 PostgreSQL 的 Azure 資料庫 的智慧型手機調整 - 彈性伺服器。
- 針對適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器進行疑難排解指南。
- 適用於 PostgreSQL 的 Azure 資料庫 中的自動數據清理調整 - 彈性伺服器。
- 針對 適用於 PostgreSQL 的 Azure 資料庫 中的高 IOPS 使用率進行疑難解答 - 彈性伺服器。
- 針對適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器中的高 CPU 使用率進行疑難排解 \(部分機器翻譯\)。
- 適用於 PostgreSQL 的 Azure 資料庫 中的查詢效能深入解析 - 彈性伺服器。