PostgreSQL vacuum原理—启动机制

在”PostgreSQL vacuum原理一功能与参数中我在致讲了vacuum的几大功能点,以及相关的一些参数,如何来调整vacuum。那么这一章节主要讲比较内核的一些东西。

1.PG发起vacuum的流程

在PG实例起动时,postmaster 进程会fork出autovacuum launcher进程。

clip_image001

完整的vacuum进程创建如下:

pg_ctl命令行起动PG实例,然后fork出postmaster Server进程,这也是PG的主进程。postmaster进程再负责fork各种其它后台进程。

按以下顺序,依次起动:logger进程,checkpoint进程,writer进程,wal writer进程,autovacuum launcher进程以及stats collector进程。

autovacuum launcher进程再负责fork autovacuum worker进程。我们具体的vacuum动作最后都交由worker进程来做,干杂活。

默认情况下,最多由三个worker进程,由参数autovacuum_max_workers控制。

image

2. autovacuum launcher进程

    autovacuum launcher是vacuum worker的总调度者。在起vacuum worker时,会先balance一次vacuum_cost_limit值,balance的过程就是新的worker起来时,

赋予此worker后面因vacuum而消耗的最大允许IO limit。因为vacuum_cost_limit值是所有worker平摊的,我们设置的vacuum_cost_limit是所有worker的总累加值。

因此新的work加入进来后,需要做两件事:一是计算新的work的cost_limit值;二是调整已经在running的worker的cost_limit值。

另外值得注意的是:从目前源码中得知,vacuum_cost_limit的值是要被vacuum_cost_delay时间平分掉的。假设cost_limit的值是200,cost_delay是10毫秒,max worker是3个,

并且都在running状态。那么可以计算出,其实每个worker每个毫秒所能允许消耗的IO值是:200/10/3,约为6.6。

另外autovacuum launcher还要重建db list,根据autovacuum_naptime去计算每个db分配到的时间。参数介绍请见:”PostgreSQL vacuum原理一功能与参数”另外,

值得注意的是,虽然可以几个worker一起运行,但是目前的做法是,在db 级别并行。也就是说worker是根据autovacuum launcher重建的db list去逐一遍历每个DB的。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30088583/viewspace-1601849/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30088583/viewspace-1601849/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值