您现在的位置是:
网站首页
> 程序设计 
> PostgreSQL 
PostgreSQL内核原理之VACUUM之GUC参数
简介PostgreSQL必须依赖autovacuum来清理死元组,清理速度势必会影响系统的IO,因此P哦是通过热SQL提供了一系列参数用于控制autovacuum的执行效率
VACUUM相关参数
我们可以使用select name, min_val, max_val from pg_settings where name ilike '%vacuum%';
来查看所有和VACUUM相关的参数,结果如下:
postgres=# select name, min_val, max_val, boot_val from pg_settings where name ilike '%vacuum%';
name | min_val | max_val | boot_val
---------------------------------------+---------+------------+------------
autovacuum | | | on
autovacuum_analyze_scale_factor | 0 | 100 | 0.1
autovacuum_analyze_threshold | 0 | 2147483647 | 50
autovacuum_freeze_max_age | 100000 | 2000000000 | 200000000
autovacuum_max_workers | 1 | 262143 | 3
autovacuum_multixact_freeze_max_age | 10000 | 2000000000 | 400000000
autovacuum_naptime | 1 | 2147483 | 60
autovacuum_vacuum_cost_delay | -1 | 100 | 2
autovacuum_vacuum_cost_limit | -1 | 10000 | -1
autovacuum_vacuum_insert_scale_factor | 0 | 100 | 0.2
autovacuum_vacuum_insert_threshold | -1 | 2147483647 | 1000
autovacuum_vacuum_scale_factor | 0 | 100 | 0.2
autovacuum_vacuum_threshold | 0 | 2147483647 | 50
autovacuum_work_mem | -1 | 2147483647 | -1
log_autovacuum_min_duration | -1 | 2147483647 | 600000
vacuum_buffer_usage_limit | 0 | 16777216 | 256
vacuum_cost_delay | 0 | 100 | 0
vacuum_cost_limit | 1 | 10000 | 200
vacuum_cost_page_dirty | 0 | 10000 | 20
vacuum_cost_page_hit | 0 | 10000 | 1
vacuum_cost_page_miss | 0 | 10000 | 2
vacuum_failsafe_age | 0 | 2100000000 | 1600000000
vacuum_freeze_min_age | 0 | 1000000000 | 50000000
vacuum_freeze_table_age | 0 | 2000000000 | 150000000
vacuum_multixact_failsafe_age | 0 | 2100000000 | 1600000000
vacuum_multixact_freeze_min_age | 0 | 1000000000 | 5000000
vacuum_multixact_freeze_table_age | 0 | 2000000000 | 150000000
(27 rows)
这里只介绍几个重要参数
- autovacuum:这个是总开关,决定着是否开启AUTO VACUUM,但是需要注意的是,即使设置autovacuum=off 也可能会触发拉起Worker。
- autovacuum_naptime:这个参数控制着Launcher检测拉起Worker的周期,注意的是这个值的真是意图时能够在naptime时间内对所有库都执行一轮清理,因此假设有N个库,那么Launcher每隔naptime/N的时间就会在一个库上拉起一个Worker;
- autovacuum_analyze_scale_factor、autovacuum_vacuum_scale_factor:这两个参数分别控制触发autoanalyze和autovacuum的阈值,分别是0.1和0.2,但这并不是说触发autovacuum的时候一定会触发autoanalyze,实际上他们的触发没有必然联系;
- autovacuum_analyze_threshold 、autovacuum_vacuum_threshold:这两个值是前面两个阈值的基准值,可以设置这两个值来控制小表的触发时机;
- autovacuum_vacuum_cost_delay、autovacuum_vacuum_cost_limit:这两个参数控制着VACUUM的IO,由于VACUUM是需要读写页面,如果清理速度过快,则可能影响业务,用这两个参数实现IO控制;
- vacuum_cost_page_hit、vacuum_cost_page_miss、vacuum_cost_page_dirty:这3个参数看着读写单个页面的cost,结合autovacuum_vacuum_cost_delay、autovacuum_vacuum_cost_limit两个参数,真实含义是当读写页面累加的cost到达limit时,需要睡眠delayms;
- autovacuum_freeze_max_age、vacuum_freeze_min_age、vacuum_freeze_table_age:这三个参数控制着VACUUM的行为动作,下面详细介绍。
相关文章
还没有其他相关文章哟~