Thread: BitMapScan performance degradation

BitMapScan performance degradation

From
Jérôme BENOIS
Date:
Hi All,

    I have some problems with my sql query :

select distinct
INTEGER_VALUE,DATE_VALUE,EI_ID,VALUE_TYPE,FLOAT_VALUE,ID,TEXT_VALUE,CATEGORY_ID,STRING_VALUE,CATEGORYATTR_ID,NAME from
((( select d_attribute as reqin2 where reqin2.CATEGORYATTR_ID = 1041947543 AND reqin2.TEXT_VALUE ilike '%autrefois%'
andei_id in ( select distinct ei_id as EIID from MPNG2_ei_attribute as reqin3 where reqin3.NAME =
'CategoryID-1084520156'AND reqin3.STRING_VALUE = '1084520156' )  )  ) ) ) as req0 join MPNG2_ei_attribute on req0.eiid
=MPNG2_ei_attribute.ei_id   order by ei_id asc; 

    When enable_bitmapscan is enabled this query cost 51893.491 ms and when
is disabled 117.709 ms. But i heard bitmapscan feature improved
performance, can you help me ?

    You can read two results of EXPLAIN ANALYZE command here :
http://sharengo.org/explain.txt

Best Regards,
Jérôme.

--
Jérôme BENOIS
Open-Source : http://www.sharengo.org
Corporate : http://www.argia-engineering.fr
JabberId : jerome.benois AT gmail.com

Attachment

Re: BitMapScan performance degradation

From
Tom Lane
Date:
=?ISO-8859-1?Q?J=E9r=F4me?= BENOIS <benois@argia-engineering.fr> writes:
>     You can read two results of EXPLAIN ANALYZE command here :
> http://sharengo.org/explain.txt

I think the problem is the misestimation of the size of the reqin3
result:

->  Bitmap Heap Scan on mpng2_ei_attribute reqin3  (cost=28.17..32.18 rows=1 width=4) (actual time=1.512..7.941
rows=1394loops=1) 
      Recheck Cond: (((string_value)::text = '1084520156'::text) AND ((name)::text = 'CategoryID-1084520156'::text))
      ->  BitmapAnd  (cost=28.17..28.17 rows=1 width=0) (actual time=1.275..1.275 rows=0 loops=1)
        ->  Bitmap Index Scan on mpng2_ei_attribute_string_value  (cost=0.00..4.78 rows=510 width=0) (actual
time=0.534..0.534rows=1394 loops=1) 
              Index Cond: ((string_value)::text = '1084520156'::text)
        ->  Bitmap Index Scan on mpng2_ei_attribute_name  (cost=0.00..23.13 rows=2896 width=0) (actual
time=0.590..0.590rows=1394 loops=1) 
              Index Cond: ((name)::text = 'CategoryID-1084520156'::text)

Anytime a rowcount estimate is off by more than a factor of a thousand,
you can expect some poor choices in the rest of the plan :-(.  It looks
to me like the planner is expecting those two index conditions to be
independently selective, when in reality they are completely redundant.
Perhaps rethinking your data model would be a useful activity.

            regards, tom lane

Re: BitMapScan performance degradation

From
db@zigo.dhs.org
Date:
> When enable_bitmapscan is enabled this query cost 51893.491 ms and when
> is disabled 117.709 ms. But i heard bitmapscan feature improved
> performance, can you help me ?

The standard question we always ask first is if you have run VACUUM
ANALYZE recently?

Are all the costs and estimated number of rows the same after you have run
VACUUM ANALYZE? If not you might want to show that new plan as well.

/Dennis

Re: BitMapScan performance degradation

From
Jérôme BENOIS
Date:
Hi Dennis,


Le mardi 21 novembre 2006 à 16:12 +0100, db@zigo.dhs.org a écrit :
> > When enable_bitmapscan is enabled this query cost 51893.491 ms and when
> > is disabled 117.709 ms. But i heard bitmapscan feature improved
> > performance, can you help me ?
>
> The standard question we always ask first is if you have run VACUUM
> ANALYZE recently?

Yes i ran VACCUUM ANALYZE just before my EXPLAIN.

> Are all the costs and estimated number of rows the same after you have run
> VACUUM ANALYZE? If not you might want to show that new plan as well.
>
> /Dennis

Jérôme.

Attachment