mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Make WAL segment size configurable at initdb time.
For performance reasons a larger segment size than the default 16MB can be useful. A larger segment size has two main benefits: Firstly, in setups using archiving, it makes it easier to write scripts that can keep up with higher amounts of WAL, secondly, the WAL has to be written and synced to disk less frequently. But at the same time large segment size are disadvantageous for smaller databases. So far the segment size had to be configured at compile time, often making it unrealistic to choose one fitting to a particularly load. Therefore change it to a initdb time setting. This includes a breaking changes to the xlogreader.h API, which now requires the current segment size to be configured. For that and similar reasons a number of binaries had to be taught how to recognize the current segment size. Author: Beena Emerson, editorialized by Andres Freund Reviewed-By: Andres Freund, David Steele, Kuntal Ghosh, Michael Paquier, Peter Eisentraut, Robert Hass, Tushar Ahuja Discussion: https://postgr.es/m/CAOG9ApEAcQ--1ieKbhFzXSQPw_YLmepaa4hNdnY5+ZULpt81Mw@mail.gmail.com
This commit is contained in:
@ -562,7 +562,7 @@ tar -cf backup.tar /usr/local/pgsql/data
|
||||
produces an indefinitely long sequence of WAL records. The system
|
||||
physically divides this sequence into WAL <firstterm>segment
|
||||
files</>, which are normally 16MB apiece (although the segment size
|
||||
can be altered when building <productname>PostgreSQL</>). The segment
|
||||
can be altered during <application>initdb</>). The segment
|
||||
files are given numeric names that reflect their position in the
|
||||
abstract WAL sequence. When not using WAL archiving, the system
|
||||
normally creates just a few segment files and then
|
||||
|
@ -1058,20 +1058,6 @@ su - postgres
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--with-wal-segsize=<replaceable>SEGSIZE</replaceable></option></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Set the <firstterm>WAL segment size</>, in megabytes. This is
|
||||
the size of each individual file in the WAL log. It may be useful
|
||||
to adjust this size to control the granularity of WAL log shipping.
|
||||
The default size is 16 megabytes.
|
||||
The value must be a power of 2 between 1 and 1024 (megabytes).
|
||||
Note that changing this value requires an initdb.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--with-wal-blocksize=<replaceable>BLOCKSIZE</replaceable></option></term>
|
||||
<listitem>
|
||||
|
@ -316,6 +316,21 @@ PostgreSQL documentation
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--wal-segsize=<replaceable>SEGSIZE</replaceable></option></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Set the <firstterm>WAL segment size</>, in megabytes. This is
|
||||
the size of each individual file in the WAL log. It may be useful
|
||||
to adjust this size to control the granularity of WAL log shipping.
|
||||
This option can only be set during initialization, and cannot be
|
||||
changed later.
|
||||
The default size is 16 megabytes.
|
||||
The value must be a power of 2 between 1 and 1024 (megabytes).
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>-X <replaceable class="parameter">directory</replaceable></option></term>
|
||||
<term><option>--waldir=<replaceable class="parameter">directory</replaceable></option></term>
|
||||
<listitem>
|
||||
|
@ -752,13 +752,12 @@
|
||||
<acronym>WAL</acronym> logs are stored in the directory
|
||||
<filename>pg_wal</filename> under the data directory, as a set of
|
||||
segment files, normally each 16 MB in size (but the size can be changed
|
||||
by altering the <option>--with-wal-segsize</> configure option when
|
||||
building the server). Each segment is divided into pages, normally
|
||||
8 kB each (this size can be changed via the <option>--with-wal-blocksize</>
|
||||
configure option). The log record headers are described in
|
||||
<filename>access/xlogrecord.h</filename>; the record content is dependent
|
||||
on the type of event that is being logged. Segment files are given
|
||||
ever-increasing numbers as names, starting at
|
||||
by altering the <option>--wal-segsize</> initdb option). Each segment is
|
||||
divided into pages, normally 8 kB each (this size can be changed via the
|
||||
<option>--with-wal-blocksize</> configure option). The log record headers
|
||||
are described in <filename>access/xlogrecord.h</filename>; the record
|
||||
content is dependent on the type of event that is being logged. Segment
|
||||
files are given ever-increasing numbers as names, starting at
|
||||
<filename>000000010000000000000000</filename>. The numbers do not wrap,
|
||||
but it will take a very, very long time to exhaust the
|
||||
available stock of numbers.
|
||||
|
Reference in New Issue
Block a user