配置 autovacuum 服务器参数
清空过程使用autovacuum服务器参数配置,可允许优化工作负载的清空过程。 在 Azure 门户中,选择 Azure Database for PostgreSQL 服务器,然后从左侧菜单中选择“服务器参数”。 在搜索栏中,输入“autovacuum”。 或者,可以使用 SQL 查询系统目录视图,以使用以下查询查找 autovacuum 的当前配置。
SELECT *
FROM pg_settings
WHERE "name" LIKE '%autovacuum%';
参数名称 | 默认值 | 说明 |
---|---|---|
autovacuum | ON | 启用或禁用 autovacuum 服务器进程。 应始终启用 autovacuum。 |
autovacuum_analyze_scale_factor | 0.1 | 在决定是否触发 vacuum 操作时,指定要添加到 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 进程之间的延迟。 守护程序会在每一轮中检查数据库并根据需要为数据库中的表发出清扫和分析命令。 |
autovacuum_vacuum_cost_limit | -1 | 自动 vacuum 操作的最大成本。 如果指定为 -1(默认值),则会使用常规的 vacuum_cost_limit 值。 使用多个辅助角色,该值按比例分配给这些运行 autovacuum 的辅助角色。 每个工人的总成本不能超过这个变量的值。 |
autovacuum_vacuum_insert_threshold | 1000 | 会触发任意一张表的 vacuum 操作的插入行数。 |
autovacuum_vacuum_scale_factor | 0.2 | 与 autovacuum_vacuum_threshold 结合使用。 用于决定是否触发 vacuum 操作的表的片段。 |
autovacuum_vacuum_threshold | 50 | 触发表 vacuum 操作的最小更新、插入或删除行数。 |
autovacuum_vacuum_insert_scale_factor | 0.2 | 指定要添加到 autovacuum_vacuum_insert_threshold 以触发 vacuum 进程的表大小的片段。 |
autovacuum_work_mem | -1 KB | 每个 autovacuum 进程可以使用的最大内存。 |
log_autovacuum_min_duration | -1 | autovacuum 操作记录的时间(以毫秒为单位)。 |
vacuum 进程运行不应过于频繁或过于不频繁。 最佳频率取决于工作负载。 测试每个 autovacuum 参数以找到最适合工作负载的参数。 vacuum 进程的成本包括:
- vacuum 运行时数据页被锁定。
- vacuum 进程消耗计算时间和内存。
在表级别优化 vacuum
在 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 工作器的数量。