你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Database for PostgreSQL 灵活服务器的 pg_dump 和 pg_restore 最佳做法

适用于: Azure Database for PostgreSQL 灵活服务器

本文介绍用于加速 pg_dump 和 pg_restore 的选项与最佳做法。 还介绍了用于执行 pg_restore 的最佳服务器配置。

pg_dump 的最佳做法

可以使用 pg_dump 实用工具将 Azure Database for PostgreSQL 灵活服务器数据库提取到脚本文件或存档文件中。 以下部分列出了一些可用于通过 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 列是死元组的百分比(与活元组相比)。 如果某个表的 dead_pct 值较高,可能指示该表未正确清空。 有关详细信息,请参阅 Azure Database for PostgreSQL 灵活服务器中的 Autovacuum 优化

对于识别的每个表,可以通过运行以下命令执行手动清空分析:

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 创建的存档还原 Azure Database for PostgreSQL 灵活服务器数据库。 以下部分列出了一些用于减少总体还原时间的命令行选项。

并行还原

使用多个并发作业可以缩短在多 vCore 目标服务器上还原大型数据库的时间。 作业数可以等于或小于为目标服务器分配的 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 个 vCore,请相应地设置参数。

其他注意事项

  • 在运行 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

虚拟机注意事项

在同一 Azure 区域和可用性区域中(其中最好同时包含目标服务器和源服务器)创建虚拟机。 或者,在至少比较靠近源服务器或目标服务器的位置创建虚拟机。 我们建议使用具有高性能本地 SSD 的 Azure 虚拟机。

有关 SKU 的详细信息,请参阅:

后续步骤