mirror of
https://github.com/postgres/postgres.git
synced 2025-06-25 01:02:05 +03:00
Revert "Skip WAL for new relfilenodes, under wal_level=minimal."
This reverts commit cb2fd7eac2
. Per
numerous buildfarm members, it was incompatible with parallel query, and
a test case assumed LP64. Back-patch to 9.5 (all supported versions).
Discussion: https://postgr.es/m/20200321224920.GB1763544@rfd.leadboat.com
This commit is contained in:
@ -2171,19 +2171,16 @@ include_dir 'conf.d'
|
||||
levels. This parameter can only be set at server start.
|
||||
</para>
|
||||
<para>
|
||||
In <literal>minimal</literal> level, no information is logged for
|
||||
permanent relations for the remainder of a transaction that creates or
|
||||
rewrites them. This can make operations much faster (see
|
||||
<xref linkend="populate-pitr">). Operations that initiate this
|
||||
optimization include:
|
||||
In <literal>minimal</> level, WAL-logging of some bulk
|
||||
operations can be safely skipped, which can make those
|
||||
operations much faster (see <xref linkend="populate-pitr">).
|
||||
Operations in which this optimization can be applied include:
|
||||
<simplelist>
|
||||
<member><command>ALTER ... SET TABLESPACE</command></member>
|
||||
<member><command>CLUSTER</command></member>
|
||||
<member><command>CREATE TABLE</command></member>
|
||||
<member><command>REFRESH MATERIALIZED VIEW</command>
|
||||
(without <option>CONCURRENTLY</option>)</member>
|
||||
<member><command>REINDEX</command></member>
|
||||
<member><command>TRUNCATE</command></member>
|
||||
<member><command>CREATE TABLE AS</></member>
|
||||
<member><command>CREATE INDEX</></member>
|
||||
<member><command>CLUSTER</></member>
|
||||
<member><command>COPY</> into tables that were created or truncated in the same
|
||||
transaction</member>
|
||||
</simplelist>
|
||||
But minimal WAL does not contain enough information to reconstruct the
|
||||
data from a base backup and the WAL logs, so <literal>replica</> or
|
||||
@ -2572,26 +2569,6 @@ include_dir 'conf.d'
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry id="guc-wal-skip-threshold" xreflabel="wal_skip_threshold">
|
||||
<term><varname>wal_skip_threshold</varname> (<type>integer</type>)
|
||||
<indexterm>
|
||||
<primary><varname>wal_skip_threshold</varname> configuration parameter</primary>
|
||||
</indexterm>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
When <varname>wal_level</varname> is <literal>minimal</literal> and a
|
||||
transaction commits after creating or rewriting a permanent relation,
|
||||
this setting determines how to persist the new data. If the data is
|
||||
smaller than this setting, write it to the WAL log; otherwise, use an
|
||||
fsync of affected files. Depending on the properties of your storage,
|
||||
raising or lowering this value might help if such commits are slowing
|
||||
concurrent transactions. The default is two megabytes
|
||||
(<literal>2MB</literal>).
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry id="guc-commit-delay" xreflabel="commit_delay">
|
||||
<term><varname>commit_delay</varname> (<type>integer</type>)
|
||||
<indexterm>
|
||||
|
@ -1394,13 +1394,42 @@ SELECT * FROM x, y, a, b, c WHERE something AND somethingelse;
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Aside from avoiding the time for the archiver or WAL sender to process the
|
||||
WAL data, doing this will actually make certain commands faster, because
|
||||
they do not to write WAL at all if <varname>wal_level</varname>
|
||||
is <literal>minimal</literal> and the current subtransaction (or top-level
|
||||
transaction) created or truncated the table or index they change. (They
|
||||
can guarantee crash safety more cheaply by doing
|
||||
an <function>fsync</function> at the end than by writing WAL.)
|
||||
Aside from avoiding the time for the archiver or WAL sender to
|
||||
process the WAL data,
|
||||
doing this will actually make certain commands faster, because they
|
||||
are designed not to write WAL at all if <varname>wal_level</varname>
|
||||
is <literal>minimal</>. (They can guarantee crash safety more cheaply
|
||||
by doing an <function>fsync</> at the end than by writing WAL.)
|
||||
This applies to the following commands:
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
<command>CREATE TABLE AS SELECT</command>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<command>CREATE INDEX</command> (and variants such as
|
||||
<command>ALTER TABLE ADD PRIMARY KEY</command>)
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<command>ALTER TABLE SET TABLESPACE</command>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<command>CLUSTER</command>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<command>COPY FROM</command>, when the target table has been
|
||||
created or truncated earlier in the same transaction
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
|
Reference in New Issue
Block a user