mirror of
https://github.com/postgres/postgres.git
synced 2025-05-01 01:04:50 +03:00
Improve documentation about multixact IDs.
Per gripe from Josh Berkus.
This commit is contained in:
parent
6ef325429c
commit
e7f409756d
@ -616,13 +616,16 @@ HINT: Stop the postmaster and vacuum that database in single-user mode.
|
|||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<firstterm>Multixacts</> are used to implement row locking by
|
<firstterm>Multixact IDs</> are used to support row locking by
|
||||||
multiple transactions: since there is limited space in the tuple
|
multiple transactions. Since there is only limited space in a tuple
|
||||||
header to store lock information, that information is stored as a
|
header to store lock information, that information is encoded as
|
||||||
multixact separately in the <filename>pg_multixact</> subdirectory,
|
a <quote>multiple transaction ID</>, or multixact ID for short,
|
||||||
and only its ID is in the <structfield>xmax</> field
|
whenever there is more than one transaction concurrently locking a
|
||||||
in the tuple header.
|
row. Information about which transaction IDs are included in any
|
||||||
Similar to transaction IDs, multixact IDs are implemented as a
|
particular multixact ID is stored separately in
|
||||||
|
the <filename>pg_multixact</> subdirectory, and only the multixact ID
|
||||||
|
appears in the <structfield>xmax</> field in the tuple header.
|
||||||
|
Like transaction IDs, multixact IDs are implemented as a
|
||||||
32-bit counter and corresponding storage, all of which requires
|
32-bit counter and corresponding storage, all of which requires
|
||||||
careful aging management, storage cleanup, and wraparound handling.
|
careful aging management, storage cleanup, and wraparound handling.
|
||||||
</para>
|
</para>
|
||||||
@ -634,8 +637,8 @@ HINT: Stop the postmaster and vacuum that database in single-user mode.
|
|||||||
is replaced by a different value, which can be the zero value, a single
|
is replaced by a different value, which can be the zero value, a single
|
||||||
transaction ID, or a newer multixact ID. For each table,
|
transaction ID, or a newer multixact ID. For each table,
|
||||||
<structname>pg_class</>.<structfield>relminmxid</> stores the oldest
|
<structname>pg_class</>.<structfield>relminmxid</> stores the oldest
|
||||||
possible value still stored in any tuple of that table. Every time this
|
possible multixact ID still appearing in any tuple of that table.
|
||||||
value is older than
|
If this value is older than
|
||||||
<xref linkend="guc-vacuum-multixact-freeze-table-age">, a whole-table
|
<xref linkend="guc-vacuum-multixact-freeze-table-age">, a whole-table
|
||||||
scan is forced. Whole-table <command>VACUUM</> scans, regardless of
|
scan is forced. Whole-table <command>VACUUM</> scans, regardless of
|
||||||
what causes them, enable advancing the value for that table.
|
what causes them, enable advancing the value for that table.
|
||||||
|
@ -64,9 +64,11 @@ Branch: REL9_3_STABLE [8e9a16ab8] 2013-12-16 11:29:51 -0300
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The method for tuple freezing was unable to handle some cases
|
The logic for tuple freezing was unable to handle some cases involving
|
||||||
involving freezing of <quote>multixact</> IDs, with the practical
|
freezing of
|
||||||
effect that shared row-level locks might be forgotten once old enough.
|
<link linkend="vacuum-for-multixact-wraparound"><firstterm>multixact</>
|
||||||
|
IDs</link>, with the practical effect that shared row-level locks
|
||||||
|
might be forgotten once old enough.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user