| 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: | Whole Thread | Raw Message | 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 |