PostgreSQL的Vacuum由于以下原因需要定期执行。
- 释放,再利用因更新或者删除更新而占用的磁盘空间。
-
更新PostgreSQL
查询计划用的统计数据。 -
避免事务ID的重置而引起非常老的数据丢失。
VACUUM
的标准SQL文的执行和其他的对数据库的实际操作可以并行处理。
SELECT
、INSERT
、UPDATE
、DELETE
等命令和同通常一样继续能够执行。但是,VACUUM处理中的时候,
ALTER TABLE ADD COLUMN等等的命令不能够对表进行重新定义。
还有,由于执行VACUUM
的时候,有大量的I/O操作,其他的操作可能性能比较低,比如查询的反应非常慢。为了较少对性能的影响,可以通过参数来调整。
- autovacuum
(boolean
): -
数据库服务器是否设置为自动vacuum。默认为
自动vacuum。
但是如果要让vacuum能够正常运转,必须使
track_counts
有效。
track_counts这个参数在
postgresql.conf配置文件内,或者通过命令来设置。即使设置不是自动vacuum。系统发现有防止事务ID的重置的必要的时候也会自动启动
- log_autovacuum_min_duration
(integer
): -
设置执行时间超过多长
的vacuum才输出log。时间单位毫秒。如果这个参数设置为0的话,所有vacuum相关
的log都输出。如果这个参数设置为-1的话,这个也是默认设置。log的输出无效,也就是所有vacuum相关
的log都不输出。这个参数的设置可以修改postgresql.conf配置文件,也可以通过命令来设置。
- autovacuum_max_workers
(integer
): -
设置能够同时执行的vacuum最大进程数。
默认是3个。这个参数的设置可以修改postgresql.conf配置文件,也可以通过命令来设置。
- autovacuum_naptime
(integer
): - 设置数据库执行vacuum的最小延迟。时间单位是分。默认是1分钟。
- 这个参数的设置可以修改postgresql.conf配置文件,也可以通过命令来设置。
-
- autovacuum_vacuum_threshold
(integer
): -
设置任何一张表内触发VACUUM
的
更新,删除tuple的最小数。默认为50。这个参数的设置可以修改postgresql.conf配置文件,也可以通过命令来设置。这个设定通过
pg_autovacuum的项目可以覆盖每张表。 - autovacuum_analyze_threshold
(integer
): -
设置任何一张表内触发ANALYZE
的更新,删除tuple的最小数。默认为50。这个参数的设置可以修改postgresql.conf配置文件,也可以通过命令来设置。这个设定通过
pg_autovacuum的项目可以覆盖每张表。 - autovacuum_vacuum_scale_factor
(floating point
): -
是否触发VACUUM的判断的时候
、设置
autovacuum_vacuum_threshold
追加的表容量断片。默认是0.2(即20%)。这个参数的设置可以修改postgresql.conf配置文件,也可以通过命令来设置。这个设定通过
pg_autovacuum的项目可以覆盖每张表。 - autovacuum_analyze_scale_factor
(floating point
): -
是否触发
ANALYZE
的判断的时候
、设置
autovacuum_vacuum_threshold
追加的表容量断片。默认是0.1(即10%)。这个参数的设置可以修改postgresql.conf配置文件,也可以通过命令来设置。这个设定通过
pg_autovacuum的项目可以覆盖每张表。 - autovacuum_freeze_max_age
(integer
): -
为了防止事务ID的重置,VACUUM强制操作前,设置表的
pg_class
.relfrozenxid字段的最大值。默认是2亿。这个参数只能够在启动的时候设置。
- autovacuum_vacuum_cost_delay
(integer
): -
设置自动vacuum操作中cost延迟。默认是20毫秒。设置的为-1的话,使用vacuum_cost_delay的值。
这个参数的设置可以修改postgresql.conf配置文件,也可以通过命令来设置。这个设定通过
pg_autovacuum的项目可以覆盖每张表。
- autovacuum_vacuum_cost_limit
(integer
): -
设置自动vacuum操作中cost的最大界限值。默认是-1,这时候用vacuum_cost_limit的值。
这个参数的设置可以修改postgresql.conf配置文件,也可以通过命令来设置。这个设定通过
pg_autovacuum的项目可以覆盖每张表。