PGSQL 设置autovacuum

VACUUM和ANALYZE是PostgreSQL 数据库维护最重要的两个操作。
vacuum用于恢复表中“死元组”占用的空间。删除或更新(删除后插入)记录时,将产生死元组。PostgreSQL不会从表中物理删除旧行,而是在其上放置一个“标记”,以便查询不会返回该行。当vacuum进程运行时,这些死元组占用的空间被标记为可由其他元组重用。
“analyze”顾名思义——它分析数据库表的内容,并收集有关每个表的每一列值分布的统计信息。PostgreSQL 查询引擎使用这些统计信息来查找最佳执行计划。在数据库中插入、删除和更新行时,列统计信息也会更改。analyze——由DBA手动运行,或在auto vacuum后由PostgreSQL自动运行——确保统计数据是最新的。
虽然听起来相对简单,但幕后的vacuum和analyze是两个复杂的过程。幸运的是,DBA不必担心他们的内部结构。但是,他们经常对手动运行这些进程或为配置参数设置最佳值感到困惑。

1 查看autovacuum是否开启

2 查询vacuum/analyze开关

select name,setting,short_desc  from pg_settings where name='track_counts'
union all
select name,setting,short_desc from pg_settings where name ='autovacuum';

 3 查看/修改autovacuum参数

[root@localhost pgdata]# vi postgresql.conf 

4 vacuum/analyze触发条件

--autovacuum触发条件
--autovacuum会做两件事件:一是vacuum,二是analyze。触发条件如下:
--vacuum:autovacuum_vacuum_cost_limit*autovacuum_vacuum_scale_factor + autovacuum_vacuum_threshold
--analyze:autovacuum_analyze_scale_factor* num of tuples per table + autovacuum_analyze_threshold
--例如:test表上有1000条记录,当对这个表进行dml操作达到以下阀值是就会进行autovacuum候选列表,等待执行autovacuum操作。
--vacuum=10000*0.1+50=1050个tuple
--analyze=10000*0.05+50=550个tuple

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值