Re: WAL logging volume and CREATE TABLE

From: Robert Haas <robertmhaas(at)gmail(dot)com>
To: Bruce Momjian <bruce(at)momjian(dot)us>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: WAL logging volume and CREATE TABLE
Date: 2011-08-03 02:30:39
Message-ID: CA+TgmoZbp4Up2i=JbWTja3CK6sB+iaN0JuGsX-szg9M5V1dX5Q@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Tue, Aug 2, 2011 at 11:30 AM, Bruce Momjian <bruce(at)momjian(dot)us> wrote:
> Tom Lane wrote:
>> Bruce Momjian <bruce(at)momjian(dot)us> writes:
>> > Our docs suggest an optimization to reduce WAL logging when you are
>> > creating and populating a table:
>>
>> >     http://www.postgresql.org/docs/9.0/static/runtime-config-wal.html#RUNTIME-CONFIG-WAL-SETTINGS
>>
>> >     In minimal level, WAL-logging of some bulk operations, like CREATE
>> >     INDEX, CLUSTER and COPY on a table that was created or truncated in the
>> >     same transaction can be safely skipped, which can make those operations
>> >     much faster (see Section 14.4.7). But minimal WAL does not contain
>> >     enough information to reconstruct the data from a base backup and the
>> >     WAL logs, so either archive or hot_standby level must be used to enable
>> >     WAL archiving (archive_mode) and streaming replication.
>>
>> > I am confused why we issue significant WAL traffic for CREATE INDEX?
>>
>> The point is that in minimal level we *don't*.  We just fsync the index
>> file before committing.  In higher levels we have to write the whole
>> index contents to the WAL, not only the disk file, so that the info
>> reaches the archive or standby slaves.
>>
>> Same for the other cases.
>
> I realize the need for WAL logging CREATE INDEX for non-'minimal'
> wal_level values.
>
> But the documentation states the WAL logging is reduced for CREATE INDEX
> by doing CREATE TABLE in the same transaction block.  Why is this true?
> Why would the CREATE TABLE affect the "CREATE INDEX" WAL volume?
>
> I am wondering if the documention is correct about CLUSTER and COPY, but
> incorrect for CREATE INDEX.

I think the problem here might be ambiguous wording. I believe that
the modifier "on a table that was created or truncated in the same
transaction" is intended to apply only to "COPY", but the way it's
written, someone (such as you) might be forgiven for thinking that it
applied to the larger phrase "CREATE INDEX, CLUSTER, or COPY".

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Robert Haas 2011-08-03 02:37:59 Re: Transient plans versus the SPI API
Previous Message Robert Haas 2011-08-03 02:27:53 Re: pgbench internal contention