回复: fsync data directory after DB crash
От | Pandora |
---|---|
Тема | 回复: fsync data directory after DB crash |
Дата | |
Msg-id | tencent_A92A1D156B49C6DD74F7A5B0A4786291AA0A@qq.com обсуждение исходный текст |
Ответ на | Re: fsync data directory after DB crash (Thomas Munro <thomas.munro@gmail.com>) |
Ответы |
Re: fsync data directory after DB crash
|
Список | pgsql-general |
Yes, I saw the usage of syncfs in PG14, but it is recommended to use it on Linux 5.8 or higher. If my OS version is lower than 5.8, can I still enable it?
------------------ 原始邮件 ------------------
发件人: "Thomas Munro"<thomas.munro@gmail.com>;
发送时间: 2023年7月19日(星期三) 上午9:37
收件人: "Michael Paquier"<michael@paquier.xyz>;
抄送: "Pandora"<yeyukui@qq.com>; "pgsql-general"<pgsql-general@lists.postgresql.org>;
主题: Re: fsync data directory after DB crash
> On Tue, Jul 18, 2023 at 04:50:25PM +0800, Pandora wrote:
> > I found that starting from version 9.5, PostgreSQL will do fsync on
> > the entire data directory after DB crash. Here's a question: if I
> > have FPW = on, why is this step still necessary?
>
> Yes, see around the call of SyncDataDirectory() in xlog.c:
> * - There might be data which we had written, intending to fsync it, but
> * which we had not actually fsync'd yet. Therefore, a power failure in
> * the near future might cause earlier unflushed writes to be lost, even
> * though more recent data written to disk from here on would be
> * persisted. To avoid that, fsync the entire data directory.
FTR there was some discussion and experimental patches that would add
recovery_init_sync_method=none and recovery_init_sync_method=wal,
which are based on the OP's observation + an idea for how to make it
work even without FPWs enabled:
https://www.postgresql.org/message-id/flat/CA%2BhUKGKgj%2BSN6z91nVmOmTv2KYrG7VnAGdTkWdSjbOPghdtooQ%40mail.gmail.com#576caccf21cb6c3e883601fceb28d36b
Only recovery_init_sync_method=syncfs actually went in from that
thread. It works better for some setups (systems where opening
squillions of files just do perform a no-op fsync() is painfully
expensive).
В списке pgsql-general по дате отправления: