配置 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 工作器的数量。