postgres9.5 若干新特性和autovacuum参数解释

1、无记录插入,有则update的sql语句新字句

insert into test1 values(1,37) ON CONFLICT (a) DO UPDATE set b= EXCLUDED.b;

http://www.postgresql.org/docs/9.5/static/sql-insert.html


2、select for update 跳过被其他进程锁定的记录

SELECT id,bonus2 from lottoryinfo_buy where bonus2 is not null  for update SKIP LOCKED;
http://www.postgresql.org/docs/9.5/static/sql-select.html


3、brin索引,适合对顺序递增或递减字段做索引,占用空间小

CREATE INDEX idx_temp_subtime ON tccpu_tempre USING brin(submit_time)
  WITH (pages_per_range = 128);
将值分为pages_per_range个段存储,记录每个段的最大值、最小值
新加入的记录,如果范围超出了创建索引时128个range的范围,不会对其索引,需要执行函数brin_summarize_new_pages,或vacuum表后才会重算range,而后索引。

可以调整系统或单表的autovacuum参数使得vacuum进程工作更加勤劳,从而使得brin索引保持更新。


4、autovacuum相关参数
? autovacuum:默认为on,表示是否开起autovacuum。默认开起。特别的,当需要冻结xid时,尽管此值为off,PG也会进行vacuum。 
? autovacuum_naptime:下一次vacuum的时间,默认10min。 这个naptime会被vacuum launcher分配到每个DB上。autovacuum_naptime/num of db。 
? log_autovacuum_min_duration:记录autovacuum动作到日志文件,当vacuum动作超过此值时。 “-1”表示不记录。“0”表示每次都记录。 
? autovacuum_max_workers:最大同时运行的worker数量,不包含launcher本身。 
? autovacuum_work_mem:每个worker可使用的最大内存数。
? autovacuum_vacuum_threshold:默认50。与autovacuum_vacuum_scale_factor配合使用, autovacuum_vacuum_scale_factor默认值为20%。当update,delete的tuples数量超过autovacuum_vacuum_scale_factor*table_size+autovacuum_vacuum_threshold时,进行vacuum。如果要使vacuum工作勤奋点,则将此值改小。 
? autovacuum_analyze_threshold:默认50。与autovacuum_analyze_scale_factor配合使用, autovacuum_analyze_scale_factor默认10%。当update,insert,delete的tuples数量超过autovacuum_analyze_scale_factor*table_size+autovacuum_analyze_threshold时,进行analyze。 
? autovacuum_freeze_max_age和autovacuum_multixact_freeze_max_age:前面一个200 million,后面一个400 million。离下一次进行xid冻结的最大事务数。 
? autovacuum_vacuum_cost_delay:如果为-1,取vacuum_cost_delay值。 
? autovacuum_vacuum_cost_limit:如果为-1,到vacuum_cost_limit的值,这个值是所有worker的累加值。



A、更改系统autovacuum相关参数
ALTER SYSTEM SET autovacuum_vacuum_scale_factor = 0.03;
ALTER SYSTEM SET autovacuum_analyze_scale_factor = 0.03;
ALTER SYSTEM SET autovacuum_vacuum_threshold = 30;
ALTER SYSTEM SET autovacuum_analyze_threshold = 30;
select pg_reload_conf ();

B、更改单表autovacuum相关参数

alter table tccpu_tempre set (autovacuum_vacuum_scale_factor=.03);

查看单表参数:
SELECT n.nspname, c.relname, pg_catalog.array_to_string(c.reloptions || array( select 'toast.' || x from pg_catalog.unnest(tc.reloptions) x),', ') as relopts 
FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_class tc ON (c.reltoastrelid = tc.oid) JOIN pg_namespace n ON c.relnamespace = n.oid 
WHERE c.relkind = 'r' AND nspname NOT IN ('pg_catalog', 'information_schema') 
and pg_catalog.array_to_string(c.reloptions || array( select 'toast.' || x from pg_catalog.unnest(tc.reloptions) x),', ') <>'';


猜你喜欢

转载自blog.csdn.net/zeeeitch/article/details/51479834
9.5