您的位置:首页 > 其它

pg源码阅读三

2016-07-19 22:34 211 查看
之前提到,bgwriter没有检查点就执行BgBufferSync();刷新buffer,下马继续看下多久执行一次,主要是通过BgWriterNap()来配置等待时间

/*

* Nap for the configured time, or sleep for 10 seconds if there is no

* bgwriter activity configured.

*

* On some platforms, signals won’t interrupt the sleep. To ensure we

* respond reasonably promptly when someone signals us, break down the

* sleep into 1-second increments, and check for interrupts after each

* nap.

*

* We absorb pending requests after each short sleep.

*/

主要通过配置的等待时间,或是10s一次

/*

* GUC parameters

*/

int BgWriterDelay = 200;

int CheckPointTimeout = 300;

int CheckPointWarning = 30;

double CheckPointCompletionTarget = 0.5;

默认延时是200ms

/* GUC variables */

bool zero_damaged_pages = false;

int bgwriter_lru_maxpages = 100;

double bgwriter_lru_multiplier = 2.0;

在buffermgr中配置了最大lru刷新的叶是100

使用

if (bgwriter_lru_maxpages > 0 || ckpt_active)

udelay = BgWriterDelay * 1000L;

else if (XLogArchiveTimeout > 0)

udelay = 1000000L; /* One second */

else

udelay = 10000000L; /* Ten seconds */

决定延时是多少

while (udelay > 999999L)

{

if (got_SIGHUP || shutdown_requested ||

(ckpt_active ? ImmediateCheckpointRequested() : checkpoint_requested))

break;

pg_usleep(1000000L);

AbsorbFsyncRequests();

udelay -= 1000000L;

}

基本1s一次调用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: