Received: from localhost (maia-4.hub.org [200.46.204.183]) by postgresql.org (Postfix) with ESMTP id C0E959FA27B for ; Tue, 28 Aug 2007 15:36:20 -0300 (ADT) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 98233-09 for ; Tue, 28 Aug 2007 15:36:16 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.5 Received: from sss.pgh.pa.us (sss.pgh.pa.us [66.207.139.130]) by postgresql.org (Postfix) with ESMTP id 889899FA282 for ; Tue, 28 Aug 2007 15:36:16 -0300 (ADT) Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1]) by sss.pgh.pa.us (8.14.1/8.14.1) with ESMTP id l7SIaDbm001207; Tue, 28 Aug 2007 14:36:14 -0400 (EDT) To: Pallav Kalva cc: pgsql-performance@postgresql.org Subject: Re: 8.2.4 Chooses Bad Query Plan In-reply-to: <46D43A8C.2080201@livedatagroup.com> References: <46D43A8C.2080201@livedatagroup.com> Comments: In-reply-to Pallav Kalva message dated "Tue, 28 Aug 2007 11:09:00 -0400" Date: Tue, 28 Aug 2007 14:36:13 -0400 Message-ID: <1206.1188326173@sss.pgh.pa.us> From: Tom Lane X-Virus-Scanned: Maia Mailguard 1.0.1 X-Archive-Number: 200708/362 X-Sequence-Number: 26492 Pallav Kalva writes: > We have recently upgraded our production database from 8.0.12 to > 8.2.4, We have seen lot of improvements on 8.2.4 side but we are also > seeing some queries which are slow. > Particularly this below query is really bad in 8.2.4 , I can get > only the explain on this as explain analyze never finishes even after 20 > min. What it's doing is scanning backward on activity1_.activityid and hoping to find a row that matches all the other constraints soon enough to make that faster than any other way of doing the query. 8.0 would have done the same thing, I believe, if the statistics looked favorable for it. So I wonder if you've forgotten to re-ANALYZE your data since migrating (a pg_dump script won't do this for you). > -> Index Scan using idx_accountactivity_fkactivityid on > accountactivity accountact0_ (cost=0.00..3.94 rows=1 width=16) > Index Cond: (accountact0_.fkactivityid = > activity1_.activityid) > Filter: (fkaccountid = 1455437) > -> Index Scan using > idx_accountactivity_fkaccountid on accountactivity accountact0_ > (cost=0.00..1641.42 rows=1343 width=16) (actual time=115.348..864.416 > rows=10302 loops=1) > Index Cond: (fkaccountid = 1455437) The discrepancy in rowcount estimates here is pretty damning. Even the 8.0 estimate wasn't really very good --- you might want to consider increasing default_statistics_target. regards, tom lane