Re: 30.3. Asynchronous Commit

Andres Freund <[email protected]>
Newsgroups gmane.comp.db.postgresql.devel.documentation
Message-ID <[email protected]>
Hi,

On 2019-04-10 16:06:10 -0400, Bruce Momjian wrote:
> On Wed, Mar 27, 2019 at 12:25:34PM +0000, PG Doc comments form wrote:
> > The following documentation comment has been logged on the website:
> > 
> > Page: https://www.postgresql.org/docs/9.6/wal-async-commit.html
> > Description:
> > 
> > How do async commits and unlogged tables relate? You might add a paragraph
> > on clarifying this relation. 
> > https://www.postgresql.org/docs/9.6/wal-async-commit.html
> 
> Async commit controls the WAL writes for _logged_ tables.  Unlogged
> tables don't generate WAL, since they are not crash safe, and hence are
> not affected by async commit.

That's not quite true, I think. Async commit is a question that only
matters at commit time. Logged/Unlogged only matters insofar as it
determines whether WAL has been written up ot that point.

Currently we *always* perform an async commit if a transaction didn't
write any WAL, even if an xid has been assigned (but we'll log a commit
record).

But even transactions that only write to unlogged tables can easily have
WAL assigned - e.g. hot pruning in catalog tables or during reads from
user defined logged tables; or enough subtransactions were used that an
xid assigment record had to be written; or some logged table (including
catalog tables) was accessed, and a hit bit had been set, and
wal_log_hint bits were set, and a lot of other reasons.

Thus I think it's wrong to say that async commit doesn't mean anything
for unlogged tables.

I'd also say that it's not correct to say that async commit really
controls WAL writes at all. It's just whether we *flush* the commit
record, or not.

Greetings,

Andres Freund
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.