配置 autovacuum 服务器参数

已完成

清扫过程是使用 autovacuum 服务器参数配置的,可用于优化工作负荷的清扫过程。 在 Azure 门户中,选择 Azure Database for PostgreSQL 服务器,然后从左侧菜单中选择 “服务器参数 ”。 在搜索栏中,输入 autovacuum。 或者,可以使用 SQL 查询系统目录视图,以使用以下查询查找 autovacuum 的当前配置。

SELECT *
FROM pg_settings 
WHERE "name" LIKE '%autovacuum%';
参数名称 违约 DESCRIPTION
自动清理 ON 启用或禁用 autovacuum 服务器进程。 应始终启用 Autovacuum。
autovacuum_analyze_scale_factor 0.1 指定一个计算表的一小部分,以添加到autovacuum_vacuum_threshold中,从而决定是否触发真空操作。 例如,0.2 是表大小的 20%。
autovacuum_analyze_threshold 50 为任意一个表触发 分析 过程所需的插入、更新或删除行数。
autovacuum_freeze_max_age 200000000 触发表 autovacuum 之前的最大期限(在事务中)以防止事务 ID 重叠。
autovacuum_max_workers 3 除 autovacuum 启动器外,任何时候运行的 autovacuum 进程的最大数量。
autovacuum_multixact_freeze_max_age(自动清理多事务冻结最大年龄) 400000000 触发表 autovacuum 之前的最大期限(在 multixact 中)以防止 multixact 重叠。
autovacuum_naptime 60 秒 数据库上的 autovacuum 进程之间的延迟。 在每个回合中,守护程序会检查数据库,并根据需要针对该数据库中的表发出 VACUUM 和 ANALYZE 命令。
autovacuum_vacuum_cost_limit -1 自动吸尘操作的最大成本。 如果指定 -1(这是默认值),则会使用常规的 vacuum_cost_limit 值。 使用多个辅助角色时,该值按比例分布于正在运行的 autovacuum 辅助角色之间。 每个辅助角色的总和不能超过此变量的值。
autovacuum_vacuum_insert_threshold 1000 为任何一个表触发清空的插入行数。
autovacuum_vacuum_scale_factor (自动清理真空缩放因子) 0.2 与autovacuum_vacuum_threshold一起使用。 用于确定是否触发真空的表的分数。
autovacuum_vacuum_threshold(自动清理阈值) 50 触发表 vacuum 操作的最小更新、插入或删除行数。
autovacuum_vacuum_insert_scale_factor (自动清理真空插入缩放系数) 0.2 指定一个表大小的小部分,此部分将添加到autovacuum_vacuum_insert_threshold中,以触发真空过程。
autovacuum_work_mem -1 KB 每个 autovacuum 进程可以使用的最大内存。
自动清理日志最小持续时间 -1 autovacuum作记录的时间(以毫秒为单位)。

真空过程不应过于频繁地运行,也不应过于不频繁地运行。 最佳频率取决于工作负荷。 测试每个 autovacuum 参数,以找到最适合您工作负载的设置。 清扫过程的成本包括:

  • 在清空运行时,数据页被锁定。
  • 清扫过程消耗计算时间和内存。

优化表级别的真空

在 Azure Database for PostgreSQL 中,可以在表级别设置 autovacuum 参数。 当某些表比其他表更新更多时,它可以提高性能。 在表级别设置 autovacuum 的示例:

ALTER TABLE mytable SET (autovacuum_vacuum_threshold = 1000);
​ALTER TABLE mytable SET (autovacuum_vacuum_scale_factor = 0.1);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_limit = 1000);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_delay = 10);

在表级别,autovacuum 是一个同步过程。 表具有的死元组百分比越大,autovacuum 进程产生的“成本”越大。

对于更新率较高的表,请考虑将表拆分为多个表。 此拆分有助于并行化 autovacuum 并降低任何一个表的“成本”。 还可以增加并行 autovacuum 工作器的数量。