Thread: aggregate on zero rows slow?

aggregate on zero rows slow?

From
Patrick Welche
Date:
I am trying to figure out why given the same query:

SELECT MAX(fromoctets),MAX(tooctets)
  FROM stats,trans
 WHERE stats.id=stats_id
   AND firsttimei=9224192
   AND sourcepeeraddress='xxx.yyy.zzz.38'
   AND flowindex=4701
   AND timeslice<'15:20:00 Wed  1 May 2002';

Aggregate  (cost=57.36..57.36 rows=1 width=16)
  ->  Nested Loop  (cost=0.00..57.36 rows=1 width=16)
        ->  Index Scan using firsttimei_idx on trans  (cost=0.00..54.33 rows=1 width=12)
        ->  Index Scan using stats_pkey on stats  (cost=0.00..3.02 rows=1 width=4)


the select appears to take much longer to complete if the WHERE clause
matches zero rows, than if it matches some rows.

Is this possible, or just chance?

Cheers,

Patrick

Re: aggregate on zero rows slow?

From
Neil Conway
Date:
On Wed, 1 May 2002 21:52:47 +0100
"Patrick Welche" <prlw1@newn.cam.ac.uk> wrote:
> I am trying to figure out why given the same query:
>
> SELECT MAX(fromoctets),MAX(tooctets)
>   FROM stats,trans
>  WHERE stats.id=stats_id
>    AND firsttimei=9224192
>    AND sourcepeeraddress='xxx.yyy.zzz.38'
>    AND flowindex=4701
>    AND timeslice<'15:20:00 Wed  1 May 2002';
>
> Aggregate  (cost=57.36..57.36 rows=1 width=16)
>   ->  Nested Loop  (cost=0.00..57.36 rows=1 width=16)
>         ->  Index Scan using firsttimei_idx on trans  (cost=0.00..54.33 rows=1 width=12)
>         ->  Index Scan using stats_pkey on stats  (cost=0.00..3.02 rows=1 width=4)
>
>
> the select appears to take much longer to complete if the WHERE clause
> matches zero rows, than if it matches some rows.

How "much longer" are we talking about? When the query is fast, how many
rows are returned, on average? Can you post the output of EXPLAIN ANALYZE
for both the fast query (where the aggregate operates on > 0 rows), and
the slow one? My guess would be that different query plans are being
chosen, the aggregate is just incidental -- but we'll need more
information to be sure.

BTW, this is 7.2, right?

Cheers,

Neil

--
Neil Conway <neilconway@rogers.com>
PGP Key ID: DB3C29FC

Re: aggregate on zero rows slow?

From
Tom Lane
Date:
Patrick Welche <prlw1@newn.cam.ac.uk> writes:
> ... the select appears to take much longer to complete if the WHERE clause
> matches zero rows, than if it matches some rows.

Doesn't make any sense to me.  Are you sure the same plan is being
chosen in both cases?  If so, could you post a complete example?

            regards, tom lane

Re: aggregate on zero rows slow?

From
Patrick Welche
Date:
On Wed, May 01, 2002 at 10:21:48PM -0400, Tom Lane wrote:
> Patrick Welche <prlw1@newn.cam.ac.uk> writes:
> > ... the select appears to take much longer to complete if the WHERE clause
> > matches zero rows, than if it matches some rows.
>
> Doesn't make any sense to me.  Are you sure the same plan is being
> chosen in both cases?  If so, could you post a complete example?

Yes, same plan both cases. Thanks for the answer: as it doesn't make any
sense to anyone, it must mean there is some corruption somewhere as a result
of Monday morning's powercut => I'll look elsewhere.

Thanks,

Patrick

Re: aggregate on zero rows slow?

From
Shaun Thomas
Date:
On Thu, 2 May 2002, Patrick Welche wrote:

> On Wed, May 01, 2002 at 10:21:48PM -0400, Tom Lane wrote:
> > Patrick Welche <prlw1@newn.cam.ac.uk> writes:
> > > ... the select appears to take much longer to complete if the WHERE clause
> > > matches zero rows, than if it matches some rows.
> >
> > Doesn't make any sense to me.  Are you sure the same plan is being
> > chosen in both cases?  If so, could you post a complete example?
>
> Yes, same plan both cases. Thanks for the answer: as it doesn't make any
> sense to anyone, it must mean there is some corruption somewhere as a result
> of Monday morning's powercut => I'll look elsewhere.

Could it possibly be that, since it can't find any rows, it's fully
exhausting the indexes looking for the values it wants?  I mean, a match
would presumably be found in the indexes before hitting the end, but a
non-match wouldn't.  If the index is big enough, I could see a query
that returned no results taking longer than one which does.

--
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
| Shaun M. Thomas                INN Database Administrator           |
| Phone: (309) 743-0812          Fax  : (309) 743-0830                |
| Email: sthomas@townnews.com    AIM  : trifthen                      |
| Web  : www.townnews.com                                             |
|                                                                     |
|     "Most of our lives are about proving something, either to       |
|      ourselves or to someone else."                                 |
|                                           -- Anonymous              |
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+



Re: aggregate on zero rows slow?

From
Patrick Welche
Date:
On Thu, May 02, 2002 at 12:32:06PM +0100, Patrick Welche wrote:
> On Wed, May 01, 2002 at 10:21:48PM -0400, Tom Lane wrote:
> > Patrick Welche <prlw1@newn.cam.ac.uk> writes:
> > > ... the select appears to take much longer to complete if the WHERE clause
> > > matches zero rows, than if it matches some rows.
> >
> > Doesn't make any sense to me.  Are you sure the same plan is being
> > chosen in both cases?  If so, could you post a complete example?
>
> Yes, same plan both cases. Thanks for the answer: as it doesn't make any
> sense to anyone, it must mean there is some corruption somewhere as a result
> of Monday morning's powercut => I'll look elsewhere.

And indeed a recompile/dump/initdb/restore cured this strange behaviour. The only
sign of a database problem though, apart from the speed, was a single occurance of
"Tuple could not find parent"...

Cheers,

Patrick