Thread: Are the estimates made for number of pages accurate

Are the estimates made for number of pages accurate

From
Sai Sadashiva Kundurmutt
Date:
Hi,
I wanted to know whether the numbers calculated by ANALYZE for number of pages are exact(the relpages field in pg_class). I had the impression that it is exact  because during random sampling the number of pages is assumed to be known. Is this true ??
Thank you,
Warm regards,
Sai Sadashiva JK

Re: Are the estimates made for number of pages accurate

From
Tom Lane
Date:
Sai Sadashiva Kundurmutt <saisadashiva2000@gmail.com> writes:
> I wanted to know whether the numbers calculated by ANALYZE for number of
> pages are exact(the relpages field in pg_class).

If memory serves, relpages is accurate as of the time of the last
VACUUM or ANALYZE on the table, but of course it could be arbitrarily
out of date later.

> I had the impression that
> it is exact  because during random sampling the number of pages is assumed
> to be known.

What makes you think that?  And even more to the point, what makes
you think that we'd rely on relpages for such a purpose?  I'd expect
a fresh RelationGetNumberOfBlocks call in any scan that had a need
to know the table size.

            regards, tom lane



Re: Are the estimates made for number of pages accurate

From
Sai Sadashiva Kundurmutt
Date:
Thank you for clearing my doubts.

On Sun, 25 Feb 2024 at 22:11, Tom Lane <tgl@sss.pgh.pa.us> wrote:
Sai Sadashiva Kundurmutt <saisadashiva2000@gmail.com> writes:
> I wanted to know whether the numbers calculated by ANALYZE for number of
> pages are exact(the relpages field in pg_class).

If memory serves, relpages is accurate as of the time of the last
VACUUM or ANALYZE on the table, but of course it could be arbitrarily
out of date later.

> I had the impression that
> it is exact  because during random sampling the number of pages is assumed
> to be known.

What makes you think that?  And even more to the point, what makes
you think that we'd rely on relpages for such a purpose?  I'd expect
a fresh RelationGetNumberOfBlocks call in any scan that had a need
to know the table size.

                        regards, tom lane