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
4vacuum/analyze触发条件
–autovacuum触发条件
–autovacuum会做两件事件:一是vacuum,二是a服务器托管网nalyze。触发条件如下:
–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
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net