Home Explore Blog CI



postgresql

53th chunk of `doc/src/sgml/config.sgml`
beca564b672152533fef5471f6f46fd309a90c68b5cf80460000000100000fbf
 Specifies how often the WAL writer flushes WAL, in volume terms.
        If the last flush happened less
        than <varname>wal_writer_delay</varname> ago and less
        than <varname>wal_writer_flush_after</varname> worth of WAL has been
        produced since, then WAL is only written to the operating system, not
        flushed to disk.  If <varname>wal_writer_flush_after</varname> is set
        to <literal>0</literal> then WAL data is always flushed immediately.
        If this value is specified without units, it is taken as WAL blocks,
        that is <symbol>XLOG_BLCKSZ</symbol> bytes, typically 8kB.
        The default is <literal>1MB</literal>.
        This parameter can only be set in the
        <filename>postgresql.conf</filename> file or on the server command line.
       </para>
      </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.  If this value is specified without units, it
        is taken as kilobytes.  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>
       <primary><varname>commit_delay</varname> configuration parameter</primary>
      </indexterm>
      </term>
      <listitem>
       <para>
        Setting <varname>commit_delay</varname> adds a time delay
        before a WAL flush is initiated.  This can improve
        group commit throughput by allowing a larger number of transactions
        to commit via a single WAL flush, if system load is high enough
        that additional transactions become ready to commit within the
        given interval.  However, it also increases latency by up to the
        <varname>commit_delay</varname> for each WAL
        flush.  Because the delay is just wasted if no other transactions
        become ready to commit, a delay is only performed if at least
        <varname>commit_siblings</varname> other transactions are active
        when a flush is about to be initiated.  Also, no delays are
        performed if <varname>fsync</varname> is disabled.
        If this value is specified without units, it is taken as microseconds.
        The default <varname>commit_delay</varname> is zero (no delay).
        Only superusers and users with the appropriate <literal>SET</literal>
        privilege can change this setting.
       </para>
       <para>
        In <productname>PostgreSQL</productname> releases prior to 9.3,
        <varname>commit_delay</varname> behaved differently and was much
        less effective: it affected only commits, rather than all WAL flushes,
        and waited for the entire configured delay even if the WAL flush
        was completed sooner.  Beginning in <productname>PostgreSQL</productname> 9.3,
        the first process that becomes ready to flush waits for the configured
        interval, while subsequent processes wait only until the leader
        completes the flush operation.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry id="guc-commit-siblings" xreflabel="commit_siblings">
      <term><varname>commit_siblings</varname>

Title: WAL Skip Threshold, Commit Delay, and Commit Siblings in PostgreSQL
Summary
This section describes three PostgreSQL configuration parameters related to write-ahead logging (WAL) and transaction commit behavior. `wal_skip_threshold` determines whether to write new relation data to WAL or fsync affected files when `wal_level` is minimal. `commit_delay` introduces a time delay before a WAL flush to improve group commit throughput under high load. `commit_siblings` is a related parameter that specifies the minimum number of active transactions required for `commit_delay` to take effect.