Re: VACUUM and ANALYZE disagreeing on what reltuples means

From: Tomas Vondra <tomas(dot)vondra(at)2ndquadrant(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: VACUUM and ANALYZE disagreeing on what reltuples means
Date: 2017-07-25 11:33:28
Message-ID: 3d250597-384e-c5f4-7533-b513e366888f@2ndquadrant.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 7/25/17 12:55 AM, Tom Lane wrote:
> Tomas Vondra <tomas(dot)vondra(at)2ndquadrant(dot)com> writes:
>> It seems to me that VACUUM and ANALYZE somewhat disagree on what
>> exactly reltuples means. VACUUM seems to be thinking that reltuples
>> = live + dead while ANALYZE apparently believes that reltuples =
>> live
>
>> The question is - which of the reltuples definitions is the right
>> one? I've always assumed that "reltuples = live + dead" but perhaps
>> not?
>
> I think the planner basically assumes that reltuples is the live
> tuple count, so maybe we'd better change VACUUM to get in step.
>

Attached is a patch that (I think) does just that. The disagreement was
caused by VACUUM treating recently dead tuples as live, while ANALYZE
treats both of those as dead.

At first I was worried that this will negatively affect plans in the
long-running transaction, as it will get underestimates (due to
reltuples not including rows it can see). But that's a problem we
already have anyway, you just need to run ANALYZE in the other session.

regards

--
Tomas Vondra http://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Attachment Content-Type Size
vacuum-reltuples-fix.patch text/x-patch 551 bytes

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Rajkumar Raghuwanshi 2017-07-25 12:55:01 Re: UPDATE of partition key
Previous Message tushar 2017-07-25 11:09:39 Create language syntax is not proper in pg_dumpall and not working using pg_upgrade