美国主机侦探-PostgreSQL 自动Vacuum配置方式

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的项目能够掩盖每张表。

弥补:PostgreSQL数据库办理:定时vacuum

为什么PostgreSQL数据库办理作业中,定时vacuum是一个重要的作业.

原因在于以下3点:

开释,再利用 更新/删去的行所占有的磁盘空间.

更新PostgreSQL查询方案中运用的统计数据.

避免因业务ID的重置而使十分老的数据丢掉.

第一点的原因是

PostgreSQL数据的刺进,更新,删去操作并不是真实放到数据库空间.假如不定时开释空间的话,由于数据太多,查询速度会巨降.

第二点的原因是

PostgreSQL在做查询处理的时分,为了是查询速度进步,会依据统计数据来确认履行方案.假如不及时更新的话,查询的作用或许不如预期.

第三点的原因是

PostgreSQL中每一个业务都会发生一个业务ID,但这个数字是有上限的. 当业务ID到达最大值后,会从头从最小值开端循环.这样假如不及时把曾经的数据开释掉的话,本来的老数据会由于业务ID的丢掉而丢掉掉.

话说回来vacuum操作能够手动和主动.假如有专门的数据库保护人员的话,能够当令进行.但许多体系为了节约保护本钱,这样就需求依靠主动vacuum了.

虽然定时vacuum是PostgreSQL的一个缺点,不过在8.3版别今后,把这个使命交给主动vacuum就能够了.

要使主动vacuum有用,有必要设置track_counts参数为true.详细的设置能够参照官方的文档.

定时vacuum仍是自己写一个shell来主动履行比较好.

在shell中履行vacuumdb指令. 例: ./vacuumdb -d databaseName –analyze