Re: Slow Query on Postgres 8.2

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Slow Query on Postgres 8.2
Дата
Msg-id 8870.1167966245@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: Slow Query on Postgres 8.2  ("Dave Dutcher" <dave@tridecap.com>)
Ответы Re: Slow Query on Postgres 8.2  ("Dave Dutcher" <dave@tridecap.com>)
Список pgsql-performance
"Dave Dutcher" <dave@tridecap.com> writes:
> Here is the table definition.  Thanks.

[ fools around with it for awhile... ]  I think this is already fixed
for 8.2.1.  Note the costs of the two related index scans:

8.2.0:
         ->  Bitmap Index Scan on om_transaction_om_transaction_index  (cost=0.00..7421.67 rows=488 width=0) (actual
time=3411.227..3411.227rows=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,"discostu"}'::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[]))) 

8.1.2:
               ->  Bitmap Index Scan on om_transaction_om_transaction_index  (cost=0.00..101.69 rows=5949 width=0)
(actualtime=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))

8.1.2 returns a lot more rows but spends a lot less time doing it.
The reason is that using all those =ANY clauses as index quals is
*expensive* --- they actually trigger multiple scans of the index.
8.2.0 is underestimating their cost.  We fixed that a couple weeks ago
(after some reports from Arjen van der Meijden) and I can't actually get
8.2 branch tip to produce a plan like what you show.

Please try it again when 8.2.1 comes out (Monday) and we'll see if
there's any more tweaking needed.

BTW, it's interesting to note that the plan 8.1.2 produces is pretty
obviously bogus in itself ... why do only the first two arms of the
BitmapOr use as_of_date conditions?  We fixed some sillinesses in the
bitmap scan planning later in the 8.1 series, so I think you'd find
that 8.1.latest does this differently.

            regards, tom lane

В списке pgsql-performance по дате отправления:

Предыдущее
От: "Dave Dutcher"
Дата:
Сообщение: Re: Slow Query on Postgres 8.2
Следующее
От: Grega Bremec
Дата:
Сообщение: Re: PostgreSQL to host e-mail?