pg.ddx.io  pgsql-performance@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Dave Dutcher <dave@tridecap.com>
To: pgsql-performance@postgresql.org
Subject: Slow Query on Postgres 8.2
Date: Thu, 4 Jan 2007 17:31:43 -0600
Message-ID: <006801c73058$7eb7d2a0$8300a8c0@tridecap.com> (raw)

Hello,
 
I am looking at upgrading from 8.1.2 to 8.2.0, and I've found a query which
runs a lot slower.  Here is the query:
 
select type, currency_id, instrument_id, sum(amount) as total_amount from
om_transaction 
where 
strategy_id in
('BASKET1','BASKET2','BASKET3','BASKET4','BASKET5','BASKET6','BASKET7','BASK
ET8','BASKET9','BASKET10','BASKET11')
and owner_trader_id in ('dave','sam','bob','tad',
'tim','harry','frank','bart','lisa','homer','marge','maggie','apu','milhouse
','disco stu')
and cf_account_id in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,29)
and as_of_date > '2006-12-04' and as_of_date <= '2006-12-05' 
group by type, currency_id, instrument_id;

I changed the values in the in statements to fake ones, but it still takes
over three seconds on 8.2, where 8.1 only takes 26 milliseconds.  When I
increase the number of valules in the IN clauses, the query rapidly gets
worse.  I tried increasing my stats target to 1000 and analyzing, but that
didn't help so I put that back to 10.  While the query is running the CPU is
at 100%.  Is there a more efficient way to write a query like this?  I've
attached the output from EXPLAIN ANALYZE in a file because it is somewhat
large.
 
Thanks,
 

Dave Dutcher
Telluride Asset Management
952.653.6411

 

 

Attachments:

plans.txt (text/plain, 10.4K) download explain analyze select type, currency_id, instrument_id, sum(amount) as total_amount from om_transaction where strategy_id in ('BASKET1','BASKET2','BASKET3','BASKET4','BASKET5','BASKET6','BASKET7','BASKET8','BASKET9','BASKET10','BASKET11') and owner_trader_id in ('dave','sam','bob','tad', 'tim','harry','frank','bart','lisa','homer','marge','maggie','apu','milhouse','disco stu') and cf_account_id in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,29) and as_of_date > '2006-12-04' and as_of_date <= '2006-12-05' group by type, currency_id, instrument_id; Slow: -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- HashAggregate (cost=9287.82..9288.44 rows=49 width=35) (actual time=3411.238..3411.238 rows=0 loops=1) -> Bitmap Heap Scan on om_transaction (cost=7421.67..9282.94 rows=488 width=35) (actual time=3411.235..3411.235 rows=0 loops=1) Recheck Cond: ((as_of_date > '2006-12-04'::date) AND (as_of_date <= '2006-12-05'::date) AND ((strategy_id)::text = ANY (('{BASKET1,BASKET2,BASKET3,BASKET4,BASKET5,BASKET6,BASKET7,BASKET8,BASKET9,BASKET10,BASKET11}'::character varying[])::text[])) AND ((owner_trader_id)::text = ANY (('{dave,sam,bob,tad,tim,harry,frank,bart,lisa,homer,marge,maggie,apu,milhouse,"disco stu"}'::character varying[])::text[])) AND (cf_account_id = ANY ('{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,29}'::integer[]))) -> Bitmap Index Scan on om_transaction_om_transaction_index (cost=0.00..7421.67 rows=488 width=0) (actual time=3411.227..3411.227 rows=0 loops=1) Index Cond: ((as_of_date > '2006-12-04'::date) AND (as_of_date <= '2006-12-05'::date) AND ((strategy_id)::text = ANY (('{BASKET1,BASKET2,BASKET3,BASKET4,BASKET5,BASKET6,BASKET7,BASKET8,BASKET9,BASKET10,BASKET11}'::character varying[])::text[])) AND ((owner_trader_id)::text = ANY (('{dave,sam,bob,tad,tim,harry,frank,bart,lisa,homer,marge,maggie,apu,milhouse,"disco stu"}'::character varying[])::text[])) AND (cf_account_id = ANY ('{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,29}'::integer[]))) Total runtime: 3411.429 ms (6 rows) Fast: -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- HashAggregate (cost=431.45..431.87 rows=34 width=35) (actual time=25.442..25.442 rows=0 loops=1) -> Bitmap Heap Scan on om_transaction (cost=383.09..428.08 rows=337 width=35) (actual time=25.429..25.429 rows=0 loops=1) Recheck Cond: ((as_of_date > '2006-12-04'::date) AND (as_of_date <= '2006-12-05'::date) AND (((as_of_date > '2006-12-04'::date) AND (as_of_date <= '2006-12-05'::date) AND (cf_account_id = 1)) OR ((as_of_date > '2006-12-04'::date) AND (as_of_date <= '2006-12-05'::date) AND (cf_account_id = 2)) OR (cf_account_id = 3) OR (cf_account_id = 4) OR (cf_account_id = 5) OR (cf_account_id = 6) OR (cf_account_id = 7) OR (cf_account_id = 8) OR (cf_account_id = 9) OR (cf_account_id = 10) OR (cf_account_id = 11) OR (cf_account_id = 12) OR (cf_account_id = 13) OR (cf_account_id = 14) OR (cf_account_id = 15) OR (cf_account_id = 16) OR (cf_account_id = 17) OR (cf_account_id = 18) OR (cf_account_id = 29))) Filter: ((((strategy_id)::text = 'BASKET1'::text) OR ((strategy_id)::text = 'BASKET2'::text) OR ((strategy_id)::text = 'BASKET3'::text) OR ((strategy_id)::text = 'BASKET4'::text) OR ((strategy_id)::text = 'BASKET5'::text) OR ((strategy_id)::text = 'BASKET6'::text) OR ((strategy_id)::text = 'BASKET7'::text) OR ((strategy_id)::text = 'BASKET8'::text) OR ((strategy_id)::text = 'BASKET9'::text) OR ((strategy_id)::text = 'BASKET10'::text) OR ((strategy_id)::text = 'BASKET11'::text)) AND (((owner_trader_id)::text = 'dave'::text) OR ((owner_trader_id)::text = 'sam'::text) OR ((owner_trader_id)::text = 'bob'::text) OR ((owner_trader_id)::text = 'tad'::text) OR ((owner_trader_id)::text = 'tim'::text) OR ((owner_trader_id)::text = 'harry'::text) OR ((owner_trader_id)::text = 'frank'::text) OR ((owner_trader_id)::text = 'bart'::text) OR ((owner_trader_id)::text = 'lisa'::text) OR ((owner_trader_id)::text = 'homer'::text) OR ((owner_trader_id)::text = 'marge'::text) OR ((owner_trader_id)::text = 'maggie'::text) OR ((owner_trader_id)::text = 'apu'::text) OR ((owner_trader_id)::text = 'milhouse'::text) OR ((owner_trader_id)::text = 'disco stu'::text))) -> BitmapAnd (cost=383.09..383.09 rows=11 width=0) (actual time=13.497..13.497 rows=0 loops=1) -> Bitmap Index Scan on om_transaction_om_transaction_index (cost=0.00..101.69 rows=5949 width=0) (actual time=3.419..3.419 rows=7967 loops=1) Index Cond: ((as_of_date > '2006-12-04'::date) AND (as_of_date <= '2006-12-05'::date)) -> BitmapOr (cost=281.14..281.14 rows=7297 width=0) (actual time=9.968..9.968 rows=0 loops=1) -> Bitmap Index Scan on om_transaction_om_transaction_index (cost=0.00..116.57 rows=2699 width=0) (actual time=3.627..3.627 rows=2747 loops=1) Index Cond: ((as_of_date > '2006-12-04'::date) AND (as_of_date <= '2006-12-05'::date) AND (cf_account_id = 1)) -> Bitmap Index Scan on om_transaction_om_transaction_index (cost=0.00..116.57 rows=2039 width=0) (actual time=3.501..3.501 rows=2152 loops=1) Index Cond: ((as_of_date > '2006-12-04'::date) AND (as_of_date <= '2006-12-05'::date) AND (cf_account_id = 2)) -> Bitmap Index Scan on cf_account_id_om_transaction_index (cost=0.00..2.00 rows=1 width=0) (actual time=0.053..0.053 rows=0 loops=1) Index Cond: (cf_account_id = 3) -> Bitmap Index Scan on cf_account_id_om_transaction_index (cost=0.00..2.00 rows=1 width=0) (actual time=0.011..0.011 rows=0 loops=1) Index Cond: (cf_account_id = 4) -> Bitmap Index Scan on cf_account_id_om_transaction_index (cost=0.00..2.00 rows=1 width=0) (actual time=0.011..0.011 rows=1 loops=1) Index Cond: (cf_account_id = 5) -> Bitmap Index Scan on cf_account_id_om_transaction_index (cost=0.00..2.00 rows=1 width=0) (actual time=0.078..0.078 rows=194 loops=1) Index Cond: (cf_account_id = 6) -> Bitmap Index Scan on cf_account_id_om_transaction_index (cost=0.00..2.00 rows=1 width=0) (actual time=0.016..0.016 rows=0 loops=1) Index Cond: (cf_account_id = 7) -> Bitmap Index Scan on cf_account_id_om_transaction_index (cost=0.00..2.00 rows=1 width=0) (actual time=0.010..0.010 rows=0 loops=1) Index Cond: (cf_account_id = 8) -> Bitmap Index Scan on cf_account_id_om_transaction_index (cost=0.00..2.00 rows=1 width=0) (actual time=0.023..0.023 rows=6 loops=1) Index Cond: (cf_account_id = 9) -> Bitmap Index Scan on cf_account_id_om_transaction_index (cost=0.00..2.00 rows=1 width=0) (actual time=0.010..0.010 rows=0 loops=1) Index Cond: (cf_account_id = 10) -> Bitmap Index Scan on cf_account_id_om_transaction_index (cost=0.00..2.00 rows=1 width=0) (actual time=0.010..0.010 rows=0 loops=1) Index Cond: (cf_account_id = 11) -> Bitmap Index Scan on cf_account_id_om_transaction_index (cost=0.00..2.00 rows=1 width=0) (actual time=0.009..0.009 rows=0 loops=1) Index Cond: (cf_account_id = 12) -> Bitmap Index Scan on cf_account_id_om_transaction_index (cost=0.00..2.00 rows=1 width=0) (actual time=0.013..0.013 rows=12 loops=1) Index Cond: (cf_account_id = 13) -> Bitmap Index Scan on cf_account_id_om_transaction_index (cost=0.00..2.00 rows=1 width=0) (actual time=0.010..0.010 rows=0 loops=1) Index Cond: (cf_account_id = 14) -> Bitmap Index Scan on cf_account_id_om_transaction_index (cost=0.00..2.00 rows=1 width=0) (actual time=0.010..0.010 rows=1 loops=1) Index Cond: (cf_account_id = 15) -> Bitmap Index Scan on cf_account_id_om_transaction_index (cost=0.00..2.00 rows=1 width=0) (actual time=0.011..0.011 rows=0 loops=1) Index Cond: (cf_account_id = 16) -> Bitmap Index Scan on cf_account_id_om_transaction_index (cost=0.00..2.00 rows=1 width=0) (actual time=0.036..0.036 rows=66 loops=1) Index Cond: (cf_account_id = 17) -> Bitmap Index Scan on cf_account_id_om_transaction_index (cost=0.00..15.96 rows=2559 width=0) (actual time=2.403..2.403 rows=8201 loops=1) Index Cond: (cf_account_id = 18) -> Bitmap Index Scan on cf_account_id_om_transaction_index (cost=0.00..2.00 rows=1 width=0) (actual time=0.032..0.032 rows=0 loops=1) Index Cond: (cf_account_id = 29) Total runtime: 26.109 ms (47 rows)

view thread (7+ messages)  latest in thread

Message-ID: <006801c73058$7eb7d2a0$8300a8c0@tridecap.com>
Permalink:  ../006801c73058$7eb7d2a0$8300a8c0@tridecap.com/
Also on:    postgresql.org/message-id/006801c73058$7eb7d2a0$8300a8c0@tridecap.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-performance@postgresql.org
  Cc: dave@tridecap.com
  Subject: Re: Slow Query on Postgres 8.2
  In-Reply-To: <006801c73058$7eb7d2a0$8300a8c0@tridecap.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox