Re: Eagerly scan all-visible pages to amortize aggressive vacuum - Mailing list pgsql-hackers
From | Robert Treat |
---|---|
Subject | Re: Eagerly scan all-visible pages to amortize aggressive vacuum |
Date | |
Msg-id | CAJSLCQ3P_BVakhNWFcZ8pXE81n6zKkAdHR2wmDPw==U_02jU4Q@mail.gmail.com Whole thread Raw |
In response to | Re: Eagerly scan all-visible pages to amortize aggressive vacuum (Andres Freund <andres@anarazel.de>) |
List | pgsql-hackers |
On Mon, Jan 27, 2025 at 12:45 PM Melanie Plageman <melanieplageman@gmail.com> wrote: > > On Fri, Jan 24, 2025 at 3:43 PM Robert Haas <robertmhaas@gmail.com> wrote: > > > > On Fri, Jan 24, 2025 at 3:02 PM Melanie Plageman > > <melanieplageman@gmail.com> wrote: > attached v11 uses a fraction with this name. It follows the > conventions and I find it descriptive. > > Changing the configuration to a fraction does mean that quite a few of > the comments are different in this version. I think the description of > the guc in > config.sgml could use some review in particular. I tried to make it > clear that the percentage is not the maximum number of blocks that > could be eager scanned, because you may also eagerly scan blocks and > succeed. > Specifies the maximum fraction of pages that <command>VACUUM</command> may scan and <emphasis>fail</emphasis> to set all-frozen in the visibility map before disabling eager scanning. A value of 0 disables eager scanning altogether. The default is 0.03 (3%). Note that when eager scanning is enabled, successful page freeze attempts will not count against this limit, although they are internally capped at 20% of the all-visible but not all-frozen pages within the relation, in an effort to amortize overhead for future aggressive vacuums. This parameter can only be set in the <filename>postgresql.conf</filename> file or on the server command line; but the setting can be overridden for individual tables by changing the <link linkend="reloption-vacuum-max-eager-freeze-failure-rate">corresponding table storage parameter</link>. For more information, see <xref linkend="vacuum-for-wraparound"/>. > Other note: I noticed AutoVacOpts that are floating point numbers (like > vacuum_cost_delay) are float8s but their associated GUCs (like > autovacuum_vacuum_cost_delay) are doubles. These are going to be equivalent, > but I wanted to note the inconsistency in case I was missing something. > ::thinking emoji:: I think what you have is right, though certainly better to have a more qualified opinion. On a not entirely related item, I find it interesting that you set your max value to 1.0, but vacuum_scale_factor (and similar) set to 100.00. I think you have it right though, what does it mean to set a table's scale factor to 10,000%? > > > > > > > + ereport(INFO, > > > > + (errmsg("Vacuum successfully froze %u eager scanned blocks of > > > > \"%s.%s.%s\". Now disabling eager scanning.", > > > > > > > > I predict that if Tom sees this, you will get complaints about both > > > > the wording of the message, which pretty clearly does not conform to > > > > style guidelines for a primary error message, and also about the use > > > > of the INFO level. Allow me to suggest DEBUG1 or DEBUG2 and "disabling > > > > eager scanning after freezing %u eagerly scanned blocks". > > > > > > I've used your wording. Just for future reference, are the style > > > guidelines I was violating the capitalization and punctuation? Are > > > these documented somewhere? Also, what is a primary error message? > > > INFO level? Or ones that use ereport and are translated? I looked at > > > other messages and saw that they don't capitalize the first word or > > > use punctuation, so I assume that those were problems. > > > > Yes. Primary error messages, i.e. errmsg(), are not capitalized and > > punctuated, unlike errdetail() and errhint() messages, which are. > > > > See https://www.postgresql.org/docs/current/error-style-guide.html > > > > INFO level is used for VERY few things. I can't tell you off the top > > of my head when it's appropriate, but I think the answer is "almost > > never". > > I have changed it to DEBUG2. I started it as INFO because the other vacuum > messages about whether or not the vacuum is an aggressive vacuum were at INFO > level.I don't know what a user might prefer. Treat said this downthread: > > > Maybe, but one of the areas that INFO is used for is providing > > additional details in VACUUM VERBOSE output, and this seems like it > > would be pretty useful information to have if you are trying to > > discern changes in i/o rate during a vacuum, or trying to tune the > > failure rate setting, or several other related fields (including > > automated capture by tools like pganalyze), so I believe INFO is the > > right choice for this. > > I'm happy to go either way. I don't want users mad about verbosity, but if they > think it's helpful, then that seems good. > If there is a configurable, people will want to tune it, and DEBUG level messages aren't a usable solution. Robert Treat https://xzilla.net
pgsql-hackers by date: