Slow Query on Postgres 8.2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Title: Message
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','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;
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

 

 
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)


[Postgresql General]     [Postgresql PHP]     [PHP Users]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Yosemite]

  Powered by Linux