From: | 张广舟(明虚) <guangzhou(dot)zgz(at)alibaba-inc(dot)com> |
---|---|
To: | <pgsql-hackers(at)postgresql(dot)org> |
Cc: | 周正中(德歌) <dege(dot)zzz(at)alibaba-inc(dot)com>, 范孝剑(康贤) <funnyxj(dot)fxj(at)alibaba-inc(dot)com>, 曾文旌(义从) <wenjing(dot)zwj(at)alibaba-inc(dot)com>, 窦贤明(执白) <xianming(dot)dxm(at)alibaba-inc(dot)com>, 萧少聪(铁庵) <shaocong(dot)xsc(at)alibaba-inc(dot)com>, 陈新坚(惧留孙) <xinjian(dot)chen(at)alibaba-inc(dot)com> |
Subject: | about fsync in CLOG buffer write |
Date: | 2015-09-10 11:11:15 |
Message-ID: | D2178653.1B83F%guangzhou.zgz@alibaba-inc.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi Hackers,
We host many PG instances on each of our machines, and we want to minimize
the calls to fsync within each instance, in order to minimize possible
impact on other instances. We found there is a fsync call when CLOG buffer
is written out in SlruPhysicalWritePage(). It is often called when a backend
needs to check transaction status with SimpleLruReadPage().
The code is as follows (in src/backend/access/transam/slru.c line 837 in PG
9.4):
/*
* If not part of Flush, need to fsync now. We assume this happens
* infrequently enough that it's not a performance issue.
*/
if (!fdata)
{
if (ctl->do_fsync && pg_fsync(fd))
{
slru_errcause = SLRU_FSYNC_FAILED;
slru_errno = errno;
CloseTransientFile(fd);
return false;
}
if (CloseTransientFile(fd))
{
slru_errcause = SLRU_CLOSE_FAILED;
slru_errno = errno;
return false;
}
ctl->do_fsync is true for CLOG. Question is, could we just disable fsync
for CLOG buffer write out here? Is it safe to do so? I understand a
checkpoint will calls SimpleLruFlush to flush all CLOG buffer at once, and
the fsync call here (for buffer write out) is not necessary.
Thanks for your time!
Guangzhou
From | Date | Subject | |
---|---|---|---|
Next Message | 张广舟 (明虚) | 2015-09-10 11:39:59 | about fsync in CLOG buffer write |
Previous Message | Etsuro Fujita | 2015-09-10 10:59:41 | Another typo in comment in setrefs.c |