Thanks Jeff for the response--I did end up just analyzing the tables
manually, as a stopgap. Resource consumption was a non-issue as you
predicted (and plan was corrected, though estimates were still slightly
awkward).

With respect to the blocking of the autovacuum/analyze: no it shouldn't be
the case that those are running frequently in our case. Ditto re: database
restarts--this is out of my control because it would be DigitalOcean's
doing, but I don't see any evidence of it. Nor anything amiss in \dt+,
unfortunately.

I'll try to figure out if I can get access to the logs to search for
cancellations. Do you happen to know what that would look like if I'm
grep-ing for it? And do you have any other guesses about possible
explanations?

Thanks again for your help.

Lincoln



On Sun, Feb 23, 2025 at 6:09 PM Jeff Janes <jeff.ja...@gmail.com> wrote:

> On Sun, Feb 23, 2025 at 5:49 PM Lincoln Swaine-Moore <
> lswainemo...@gmail.com> wrote:
>
>> Thanks for the reply! I tried the analysis on our much shorter staging
>> table and it did change the plan. I haven’t tried it on the production ones
>> because my understanding is that the autovacuum process is gentler with
>> resource consumption and I didn’t want to gum things up in the meantime.
>> But that may be false or avoidable.
>>
>
> The default setting of vacuum_cost_delay is zero, while the default
> setting of autovacuum_vacuum_cost_delay is 2ms (or 20ms, depending on the
> software version).  So you can give a manual run the same resource
> consumption as an autorun just by changing vacuum_cost_delay in that
> session so that it has the same value as autovacuum_vacuum_cost_delay.
> Also, if you just do ANALYZE (rather than VACUUM ANALYZE) the resource
> usage should be rather modest anyway.
>
> Another difference is that autovac will cancel itself if it detects it is
> blocking something else, while a manual vac/analyze operation will not
> do that.  Normal operations (DML) don't block against vacuum anyway, only
> things like index creation or partition maintenance do that.  But if those
> types of operation are frequent, then doing a manual VACUUM or ANALYZE
> could indeed gum things up.  Also, if those operations are frequent, it
> could explain the missing autovac.  If every auto attempt gets cancelled
> before it completes, then it will never complete.  pg_stat_user_tables
> doesn't reflect cancelled vacuum or analyze so those will go missing.  (You
> should see mentions of cancelled autovac operations in the log file though.)
>
> Database restarts will also interrupt vacuums.  So if your database is
> shutdown and restarted regularly (for cold back-ups, or just out of some
> misguided belief that restarting occasionally is a good practise) and the
> period between restarts is shorter than how long it would take autovac to
> run, this could also explain the lack of completed autovacs.  Also, if a
> table qualifies for both auto vacuum and auto analyze, the vacuum is done
> first.  So even if auto analyze would be fast by itself, it still won't
> complete if auto vacuum is slow and never gets to finish.
>
> It is possible to override your vacuum settings on a per-table basis.  So
> another possible explanation for the missing autovacs is that those two
> tables have been specifically configured to disable autovacuum on them and
> only them.  If you use psql, \dt+ (but not regular \dt) will show such
> customizations.  I'm sure other tools also have ways to detect this, but I
> don't know what those ways are off the top of my head.
>
> Cheers,
>
> Jeff
>


-- 
Lincoln Swaine-Moore

Reply via email to