Thank you for reply. 
You are right and the PostgreSQL server writes the entire content of each disk 
page to WAL during the first modification of that page after a
checkpoint while data checksum is on. 


But I wonder whether it is necessary or not while my file system can protect 
the blocks of database to be torn. And I read a comment in 
function MarkBufferDirtyHint:
```
/*
 * If we need to protect hint bit updates from torn writes, WAL-log a
 * full page image of the page. This full page image is only necessary
 * if the hint bit update is the first change to the page since the
 * last checkpoint.
 *
 * We don't check full_page_writes here because that logic is included
 * when we call XLogInsert() since the value changes dynamically.
 */



```
However, the code tell me it has nothing to do with full_page_writes. I can't 
figure it out. 


--
Zhang Wenjie


------------------ ???????? ------------------
??????:                                                                         
                                               "Japin Li"                       
                                                             
<japi...@hotmail.com&gt;;
????????:&nbsp;2021??7??6??(??????) ????7:04
??????:&nbsp;"zwj"<757634...@qq.com&gt;;
????:&nbsp;"pgsql-hackers"<pgsql-hackers@lists.postgresql.org&gt;;
????:&nbsp;Re: Why is XLOG_FPI_FOR_HINT always need backups?




On Tue, 06 Jul 2021 at 17:58, zwj <757634...@qq.com&gt; wrote:
&gt; Hi all,
&gt;
&gt; When I read the source code file src/backend/access/transam/xloginsert.c, 
I get something confused me.
&gt; In the function XLogSaveBufferForHint, the flags are always 
REGBUF_FORCE_IMAGE which means it is always need backups.
&gt; Is it right? Why do not check the full_page_writes?

The documentation [1] says:

------------------------------------------------------------------------------
wal_log_hints (boolean)
When this parameter is on, the PostgreSQL server writes the entire content of
each disk page to WAL during the first modification of that page after a
checkpoint, even for non-critical modifications of so-called hint bits.
------------------------------------------------------------------------------

Does that mean whether the full_page_writes enable or not, if the wal_log_hints
enabled, we always write the entire content of each disk page to WAL? If I'm
right, should we mention this in wal_log_hints?

[1] https://www.postgresql.org/docs/current/runtime-config-wal.html

-- 
Regrads,
Japin Li.
ChengDu WenWu Information Technology Co.,Ltd.

Reply via email to