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 |
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 |