Re: help tuning query

From: Emanuel Calvo Franco <postgres(dot)arg(at)gmail(dot)com>
To: Kevin Kempter <kevink(at)consistentstate(dot)com>
Cc: pgsql-admin(at)postgresql(dot)org
Subject: Re: help tuning query
Date: 2009-08-20 13:59:29
Message-ID: f205bb120908200659r3d2407d2oe47df5d8dca0b284@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin

First one, try to paste explain into http://explain.depesz.com/

> select
> a.id,
> ident_id,
> time,
> customer_name,
> extract('day' from timezone(e.name, to_timestamp(a.time))) as day,
> category_id
> from
> pwreport.url_hits a left outer join
> pwreport.url_hits_category_jt c on (a.id = c.url_hits_id),

url_hits_category_jt has an index on url_hits_id?

> pwreport.ident b,
> pwreport.timezone e
> where
> a.ident_id = b.id
> and b.timezone_id = e.id
> and time >= extract ('epoch' from timestamp '2009-08-12')
> and time < extract ('epoch' from timestamp '2009-08-13' )
> and direction = 'REQUEST'
> ;
>                                                                                                     QUERY
> PLAN
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>  Merge Right Join  (cost=47528508.61..180424544.59 rows=10409251 width=53)
>   Merge Cond: (c.url_hits_id = a.id)
>   ->  Index Scan using mt_url_hits_category_jt_url_hits_id_index on
> url_hits_category_jt c  (cost=0.00..122162596.63 rows=4189283233 width=8)
>   ->  Sort  (cost=47528508.61..47536931.63 rows=3369210 width=49)
>         Sort Key: a.id
>         ->  Hash Join  (cost=2565.00..47163219.21 rows=3369210 width=49)
>               Hash Cond: (b.timezone_id = e.id)
>               ->  Hash Join  (cost=2553.49..47116881.07 rows=3369210
> width=37)
>                     Hash Cond: (a.ident_id = b.id)
>                     ->  Seq Scan on url_hits a  (cost=0.00..47051154.89
> rows=3369210 width=12)

for some reason (think absence of index) this part of the query is heavy.

Do you run analyze to your database?
Vacuum and reindex?

>                           Filter: ((direction =
> 'REQUEST'::proxy_direction_enum) AND (("time")::double precision >=
> 1250035200::double precision) AND (("time")::double precision <
> 1250121600::double precision))
>                     ->  Hash  (cost=2020.44..2020.44 rows=42644 width=29)
>                           ->  Seq Scan on ident b  (cost=0.00..2020.44
> rows=42644 width=29)
>               ->  Hash  (cost=6.78..6.78 rows=378 width=20)
>                     ->  Seq Scan on timezone e  (cost=0.00..6.78 rows=378
> width=20)
> (15 rows)
>
>
> --

--
Emanuel Calvo Franco
Database consultant at:
www.siu.edu.ar
www.emanuelcalvofranco.com.ar

In response to

Browse pgsql-admin by date

  From Date Subject
Next Message Alvaro Herrera 2009-08-20 14:14:48 Re: text cast on regprocedure fails on 8.2
Previous Message Oliveiros 2009-08-20 11:10:25 Trouble with postgres user's password on Windows