Обсуждение: 24.1.5.1. Multixacts And Wraparound
The following documentation comment has been logged on the website: Page: https://www.postgresql.org/docs/13/routine-vacuuming.html Description: In section "24.1.5.1. Multixacts And Wraparound" of https://www.postgresql.org/docs/current/routine-vacuuming.html we find the following sentence towards the end of the section: "...If the amount of used member storage space exceeds the amount 50% of the addressable storage space." I am having trouble parsing "...exceeds the amount 50% of the addressable..." part. It seems like the sentence is trying to say "...space exceeds 50% of the addressable storage space" or maybe even "...space exceeds the amount of the addressable storage space". Which is which? Many thanks, Eric Mutta.
On Thu, 2021-06-17 at 18:31 +0000, PG Doc comments form wrote: > In section "24.1.5.1. Multixacts And Wraparound" of > https://www.postgresql.org/docs/current/routine-vacuuming.html we find the > following sentence towards the end of the section: > > "...If the amount of used member storage space exceeds the amount 50% of the > addressable storage space." > > I am having trouble parsing "...exceeds the amount 50% of the > addressable..." part. > > It seems like the sentence is trying to say "...space exceeds 50% of the > addressable storage space" or maybe even "...space exceeds the amount of the > addressable storage space". Which is which? +1 I think that the second "the amount" in the sentence should be removed. Yours, Laurenz Albe
On Fri, Jun 18, 2021 at 08:51:00AM +0200, Laurenz Albe wrote: > On Thu, 2021-06-17 at 18:31 +0000, PG Doc comments form wrote: > > In section "24.1.5.1. Multixacts And Wraparound" of > > https://www.postgresql.org/docs/current/routine-vacuuming.html we find the > > following sentence towards the end of the section: > > > > "...If the amount of used member storage space exceeds the amount 50% of the > > addressable storage space." > > > > I am having trouble parsing "...exceeds the amount 50% of the > > addressable..." part. > > > > It seems like the sentence is trying to say "...space exceeds 50% of the > > addressable storage space" or maybe even "...space exceeds the amount of the > > addressable storage space". Which is which? > > +1 > > I think that the second "the amount" in the sentence should be removed. I think it is worse than that. Here is the full paragraph: As a safety device, an aggressive vacuum scan will occur for any table whose multixact-age is greater than <xref linkend="guc-autovacuum-multixact-freeze-max-age"/>. Aggressive vacuum scans will also occur progressively for all tables, starting with those that have the oldest multixact-age, if the amount of used member storage space exceeds the amount 50% of the addressable storage space. Both of these kinds of aggressive scans will occur even if autovacuum is nominally disabled. What does "the amount of used member storage space exceeds 50% of the addressable storage space" mean? -- Bruce Momjian <bruce@momjian.us> https://momjian.us EDB https://enterprisedb.com If only the physical world exists, free will is an illusion.
On Mon, 2021-06-21 at 22:50 -0400, Bruce Momjian wrote: > On Fri, Jun 18, 2021 at 08:51:00AM +0200, Laurenz Albe wrote: > > On Thu, 2021-06-17 at 18:31 +0000, PG Doc comments form wrote: > > > In section "24.1.5.1. Multixacts And Wraparound" of > > > https://www.postgresql.org/docs/current/routine-vacuuming.html we find the > > > following sentence towards the end of the section: > > > > > > "...If the amount of used member storage space exceeds the amount 50% of the > > > addressable storage space." > > > > > > I am having trouble parsing "...exceeds the amount 50% of the > > > addressable..." part. > > > > I think that the second "the amount" in the sentence should be removed. > > I think it is worse than that. Here is the full paragraph: > > As a safety device, an aggressive vacuum scan will occur for any table > whose multixact-age is greater than > <xref linkend="guc-autovacuum-multixact-freeze-max-age"/>. Aggressive > vacuum scans will also occur progressively for all tables, starting with > those that have the oldest multixact-age, if the amount of used member > storage space exceeds the amount 50% of the addressable storage space. > Both of these kinds of aggressive scans will occur even if autovacuum is > nominally disabled. > > What does "the amount of used member storage space exceeds 50% of the > addressable storage space" mean? You are right. See MultiXactMemberFreezeThreshold for the whole story. What about: As a safety device, an aggressive vacuum scan will occur for any table whose multixact-age (see <xref linkend="vacuum-for-multixact-wraparound"/>) is greater than <xref linkend="guc-autovacuum-multixact-freeze-max-age"/>. Also, if the storage occupied by multixacts exceeds 2GB, aggressive vacuum scans will occur more often for all tables, starting with those that have the oldest multixact-age. Both of these kinds ... I hope I read the source right concerning the 2GB. Yours, Laurenz Albe
On Tue, Jun 22, 2021 at 08:32:18AM +0200, Laurenz Albe wrote:
> > What does "the amount of used member storage space exceeds 50% of the
> > addressable storage space" mean?
>
> You are right. See MultiXactMemberFreezeThreshold for the whole story.
>
> What about:
>
> As a safety device, an aggressive vacuum scan will occur for any table
> whose multixact-age (see <xref linkend="vacuum-for-multixact-wraparound"/>)
> is greater than <xref linkend="guc-autovacuum-multixact-freeze-max-age"/>.
> Also, if the storage occupied by multixacts exceeds 2GB, aggressive vacuum
> scans will occur more often for all tables, starting with those that have
> the oldest multixact-age.
> Both of these kinds ...
Yes, very good. There were three problems with the original paragraph:
* Had duplicate words
* Had awkward phrasing
* Used undefined terms
Your version fixes all three of those. Patch attached.
> I hope I read the source right concerning the 2GB.
I can confirm the 2GB. do_vacuum() calls
MultiXactMemberFreezeThreshold() to set its
effective_multixact_freeze_max_age. MultiXactMemberFreezeThreshold()
compares the number of members to 2^32 (0xFFFFFFFF) / 2 or 2GB:
#define MaxMultiXactOffset ((MultiXactOffset) 0xFFFFFFFF)
#define MULTIXACT_MEMBER_SAFE_THRESHOLD (MaxMultiXactOffset / 2)
/* If member space utilization is low, no special action is required. */
if (members <= MULTIXACT_MEMBER_SAFE_THRESHOLD)
return autovacuum_multixact_freeze_max_age;
If that test fails, autovacuum_multixact_freeze_max_age is set much more
aggressively.
--
Bruce Momjian <bruce@momjian.us> https://momjian.us
EDB https://enterprisedb.com
If only the physical world exists, free will is an illusion.