Re: vacuumdb changes for stats import/export

Bruce Momjian <bruce@momjian.us>

From: Bruce Momjian <bruce@momjian.us>
To: "David G. Johnston" <david.g.johnston@gmail.com>
Cc: Frédéric Yhuel <frederic.yhuel@dalibo.com>, Nathan Bossart <nathandbossart@gmail.com>, Corey Huinker <corey.huinker@gmail.com>, John Naylor <johncnaylorls@gmail.com>, Masahiko Sawada <sawada.mshk@gmail.com>, Jeff Davis <pgsql@j-davis.com>, jian he <jian.universality@gmail.com>, Matthias van de Meent <boekewurm+postgres@gmail.com>, Tom Lane <tgl@sss.pgh.pa.us>, Magnus Hagander <magnus@hagander.net>, Stephen Frost <sfrost@snowman.net>, Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>, Peter Smith <smithpb2250@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, alvherre@alvh.no-ip.org
Date: 2025-07-26T16:06:52Z
Lists: pgsql-hackers
On Sat, Jul 26, 2025 at 07:47:47AM -0700, David G. Johnston wrote:
> On Sat, Jul 26, 2025, 07:23 Bruce Momjian <bruce@momjian.us> wrote:
> 
>     On Wed, Jul 23, 2025 at 02:45:10PM +0200, Frédéric Yhuel wrote:
>     >
>     >
>     > On 3/18/25 22:37, Nathan Bossart wrote:
>     > > Committed with the following small changes:
>     >
>     > Hi, I don't really understand this sentence in
>     > doc/src/sgml/ref/vacuumdb.sgml:
>     >
>     > > This option prevents vacuumdb from deleting existing statistics so that
>     > the query optimizer's choices do not become transiently worse.
>     >
>     > I thought that the point was to avoid unnecessary post-upgrade analyzes?
> 
>     So, the full paragraph is:
> 
>     +        Only analyze relations that are missing statistics for a column,
>     index
>     +        expression, or extended statistics object.  This option prevents
>     +        <application>vacuumdb</application> from deleting existing
>     statistics
>     +        so that the query optimizer's choices do not become transiently
>     worse.
> 
>     What it is trying to say is that if you run vacuumedb without this
>     option, not only will it analyze all tables, including ones that already
>     have statistics, but will drop statistics on this tables that already
>     have statistics for a brief period while it installs new statistics.
>     During that period, the optimizer will not have any statistics for the
>     table.  Is there a clearer way to state this?
> 
> Statistics are transactional.  Without this option specified are we really
> removing them and commiting prior to computing and saving new ones?  And we are
> opposed to just changing this behavior and instead prefer to add an option that
> at first glance seems like everyone should use?

Yes, I thought it was transactional too, but the doc patch suggests is
isn't, so maybe I am wrong.

> "If not specified the system will analyze all statistics-capable objects in
> alphabetical order.  Specifying this option then limits the result to only
> those objects that do not already have statistics.". That may not be how the
> feature strictly behaves but that would seem to be all one would expect it to
> do.

Yes, I would prefer the simpler text, if it is accurate.

-- 
  Bruce Momjian  <bruce@momjian.us>        https://momjian.us
  EDB                                      https://enterprisedb.com

  Do not let urgent matters crowd out time for investment in the future.



Commits

  1. doc: Adjust documentation for vacuumdb --missing-stats-only.

  2. Update guidance for running vacuumdb after pg_upgrade.

  3. vacuumdb: Add option for analyzing only relations missing stats.

  4. vacuumdb: Teach vacuum_one_database() to reuse query results.