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
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]