適用於 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 的詳細資訊,請參閱:

下一步