docs: Make claims about the benefits of HOT updates more precise.

The old text claims that HOT completely removes old row versions.
It was unclear whether it just meant the tuples themselves, or the
tuples together with their line pointers. If it meant the former,
it was wrong because we can remove dead row versions even when no
HOT updates have occurred, so it's not describing a benefit of HOT.
If it meant the latter, it was wrong because HOT doesn't allow
reclaiming the root tuple's line pointer.

This section does seems like it's intended to be more of an
informal introduction to HOT than a precise technical description
of every detail of how it works, but we still don't want it to
say things that are just not true, so update the text enough
to avoid that.

Patch by me, reviewed by James Coleman (although he would have
preferred more extensive changes) and Shubham Khanna.

Discussion: http://postgr.es/m/CA+TgmobH6DPmR-u--Xgeg8cYUwhDhypNsv38nDrAJyf_xno=TQ@mail.gmail.com
This commit is contained in:
Robert Haas 2024-03-21 12:54:58 -04:00
parent 84d8066319
commit 57184c3b5d
1 changed files with 11 additions and 5 deletions

View File

@ -1122,11 +1122,17 @@ data. Empty in ordinary tables.</entry>
</listitem>
<listitem>
<para>
Old versions of updated rows can be completely removed during normal
operation, including <command>SELECT</command>s, instead of requiring
periodic vacuum operations. (This is possible because indexes
do not reference their <link linkend="storage-page-layout">page
item identifiers</link>.)
When a row is updated multiple times, row versions other than the oldest
and the newest can be completely removed during normal operation,
including <command>SELECT</command>s, instead of requiring periodic vacuum
operations. (Indexes always refer to the
<link linkend="storage-page-layout">page item identifier</link> of the
original row version. The tuple data associated with that row version
is removed, and its item identifier is converted to a redirect that
points to the oldest version that may still be visible to some concurrent
transaction. Intermediate row versions that are no longer visible to
anyone are completely removed, and the associated page item identifiers
are made available for reuse.)
</para>
</listitem>
</itemizedlist>