Re: bitmap index scan problem? - Mailing list pgsql-bugs

From stig erikson
Subject Re: bitmap index scan problem?
Date
Msg-id ee4dm1$98p$1@floppy.pyrenet.fr
Whole thread Raw
In response to Re: bitmap index scan problem?  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-bugs
Tom Lane wrote:
> stig erikson <stigerikson_nospam_@yahoo.se> writes:
>> the question is simply why the planner is not smart enough to skip the bitmap scan if normal operation is faster.
>
> Probably because it hasn't got good statistics about the distribution of
> "bid":
>
>>                 ->  Bitmap Index Scan on bid_index  (cost=0.00..44.51 rows=7576 width=0) (actual time=0.137..0.137
rows=506loops=1) 
>>                       Index Cond: (bid = 17675)
>
> When the rowcount estimate is off by more than a factor of 10, the costs
> are going to be wrong too.  Try increasing the statistics target for this
> table.
>
>             regards, tom lane
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: don't forget to increase your free space map settings
>

Hi.
thank you for your answer.
the last example was not 100% according to what my intention was, even though it shows the problem.
here is a better example.
i have not yet changed the default statistics target, how do i find out what i should change it to?

again i am quite confused that PG does not use the bid_index when enable_bitmapscan is true.

some other information:
- there are around 30 000 000 rows in total.

- there are usually 28-35 different values for ct at any given time, the number of times each value occurs varies from
   less then 10 to over 10 000 000.

- there are usually 23 000 different values for bid at any given time. the number of times each value occurs varies
from
   100 to 20 000.




stat=# show default_statistics_target;
  default_statistics_target
---------------------------
  10
(1 row)

stat=# VACUUM FULL ANALYZE stats ;
VACUUM

stat=# set enable_bitmapscan to 1;
SET
stat=# explain analyze select aid, ct, sum(total) from stats where (ct='90' OR ct='212') and bid=17675 GROUP BY aid,
ct;
                                                                         QUERY PLAN

-----------------------------------------------------------------------------------------------------------------------------------------------------------
  HashAggregate  (cost=18149.28..18149.94 rows=53 width=16) (actual time=14458.638..14458.644 rows=3 loops=1)
    ->  Bitmap Heap Scan on stats  (cost=15786.50..18144.74 rows=605 width=16) (actual time=14033.693..14458.260
rows=62loops=1) 
          Recheck Cond: ((bid = 17675) AND ((ct = 90) OR (ct = 212)))
          ->  BitmapAnd  (cost=15786.50..15786.50 rows=608 width=0) (actual time=14026.953..14026.953 rows=0 loops=1)
                ->  Bitmap Index Scan on bid_index  (cost=0.00..44.10 rows=7456 width=0) (actual time=79.293..79.293
rows=506loops=1) 
                      Index Cond: (bid = 17675)
                ->  BitmapOr  (cost=15742.16..15742.16 rows=2766331 width=0) (actual time=13947.348..13947.348 rows=0
loops=1)
                      ->  Bitmap Index Scan on ct_index  (cost=0.00..14675.92 rows=2579119 width=0) (actual
time=13526.774..13526.774rows=2563790 loops=1) 
                            Index Cond: (ct = 90)
                      ->  Bitmap Index Scan on ct_index  (cost=0.00..1066.24 rows=187212 width=0) (actual
time=420.564..420.564rows=374354 loops=1) 
                            Index Cond: (ct = 212)
  Total runtime: 14458.747 ms
(12 rows)



stat=# set enable_bitmapscan to 0;
SET
stat=# explain analyze select aid, ct, sum(total) from stats where (ct='90' OR ct='212') and bid=17675 GROUP BY aid,
ct;
                                                           QUERY PLAN

-------------------------------------------------------------------------------------------------------------------------------
  HashAggregate  (cost=28152.82..28153.48 rows=53 width=16) (actual time=7.759..7.768 rows=3 loops=1)
    ->  Index Scan using bid_index on stats  (cost=0.00..28148.28 rows=605 width=16) (actual time=0.100..7.483 rows=62
loops=1)
          Index Cond: (bid = 17675)
          Filter: ((ct = 90) OR (ct = 212))
  Total runtime: 7.858 ms
(5 rows)




/stig

pgsql-bugs by date:

Previous
From: "Reddy, Ashok Kumar P (GE Healthcare)"
Date:
Subject: relocation error :/usr/lib/libpq.so.3 :undefined symbol krb5_cc_get_principal
Next
From: Chris Purcell
Date:
Subject: Unexpected chunk number