curius behavior of planner after analyze, (Pg7.5) - Mailing list pgsql-general

From Pavel Stehule
Subject curius behavior of planner after analyze, (Pg7.5)
Date
Msg-id Pine.LNX.4.44.0406071432470.30865-100000@kix.fsv.cvut.cz
Whole thread Raw
List pgsql-general
Hello

I found following select where plan before vacuum analyse is better than
after vacuum. What I have to do? I can change only set statistic for any
column. How I can find which columns I have to alter?

Regards
Pavel Stehule

intra_test=# explain analyze select t.value, t.sp_op_id,
s.obchodni_pripad_id, o.popis, p.popis, op.jmeno, q.comment, op.partner_id
from techbox t, sp_o
p_produkt s, techreq q, obchodni_pripad o, produkt p, obchodni_partner op
where lcase(value) like '%zemek%' and t.sp_op_id=s.sp_op_id and
t.techr_id=q.t
echr_id and s.obchodni_pripad_id=o.obchodni_pripad_id and
p.produkt_id=s.produkt_id and o.partner_id=op.partner_id;

QUERY PLAN

------------------------------------------------------------------------------------------------------------------------------------------------------
 Nested Loop  (cost=512.53..551.66 rows=3 width=1108) (actual
time=72.236..72.740 rows=2 loops=1)
   ->  Nested Loop  (cost=512.53..533.75 rows=3 width=963) (actual
time=72.176..72.637 rows=2 loops=1)
         ->  Hash Join  (cost=512.53..515.87 rows=3 width=814) (actual
time=72.097..72.519 rows=2 loops=1)
               Hash Cond: ("outer".produkt_id = "inner".produkt_id)
               ->  Seq Scan on produkt p  (cost=0.00..2.66 rows=132
width=520) (actual time=0.010..0.259 rows=132 loops=1)
               ->  Hash  (cost=512.52..512.52 rows=4 width=302) (actual
time=71.998..71.998 rows=0 loops=1)
                     ->  Nested Loop  (cost=1.14..512.52 rows=4 width=302)
(actual time=0.807..71.989 rows=2 loops=1)
                           ->  Hash Join  (cost=1.14..488.50 rows=4
width=294) (actual time=0.724..71.853 rows=2 loops=1)
                                 Hash Cond: ("outer".techr_id =
"inner".techr_id)
                                 ->  Seq Scan on techbox t
(cost=0.00..487.16 rows=35 width=153) (actual time=0.535..71.649 rows=2
loops=1)
                                       Filter: (lower((value)::text) ~~
'%zemek%'::text)
                                 ->  Hash  (cost=1.09..1.09 rows=19
width=149) (actual time=0.162..0.162 rows=0 loops=1)
                                       ->  Seq Scan on techreq q
(cost=0.00..1.09 rows=19 width=149) (actual time=0.039..0.118 rows=19
loops=1)
                           ->  Index Scan using cccc on sp_op_produkt s
(cost=0.00..6.00 rows=1 width=12) (actual time=0.043..0.049 rows=1
loops=2)
                                 Index Cond: ("outer".sp_op_id =
s.sp_op_id)
         ->  Index Scan using obchodni_pripad_pkey on obchodni_pripad o
(cost=0.00..5.95 rows=1 width=153) (actual time=0.029..0.033 rows=1
loops=2)
               Index Cond: ("outer".obchodni_pripad_id =
o.obchodni_pripad_id)
   ->  Index Scan using obchodni_partner_pkey on obchodni_partner op
(cost=0.00..5.96 rows=1 width=149) (actual time=0.022..0.026 rows=1
loops=2)
         Index Cond: ("outer".partner_id = op.partner_id)
 Total runtime: 73.358 ms
(20 řádek)

intra_test=# VACUUM ANALYZE;
VACUUM
intra_test=# explain analyze select t.value, t.sp_op_id,
s.obchodni_pripad_id, o.popis, p.popis, op.jmeno, q.comment, op.partner_id
from techbox t, sp_o
p_produkt s, techreq q, obchodni_pripad o, produkt p, obchodni_partner op
where lcase(value) like '%zemek%' and t.sp_op_id=s.sp_op_id and
t.techr_id=q.t
echr_id and s.obchodni_pripad_id=o.obchodni_pripad_id and
p.produkt_id=s.produkt_id and o.partner_id=op.partner_id;

QUERY PLAN


--------------------------------------------------------------------------------------------------------------------------------------------------------
---------------
 Hash Join  (cost=683.73..750.25 rows=35 width=114) (actual
time=89.755..95.817 rows=2 loops=1)
   Hash Cond: ("outer".techr_id = "inner".techr_id)
   ->  Hash Join  (cost=682.59..748.75 rows=35 width=100) (actual
time=88.764..94.811 rows=2 loops=1)
         Hash Cond: ("outer".partner_id = "inner".partner_id)
         ->  Seq Scan on obchodni_partner op  (cost=0.00..53.99 rows=2399
width=28) (actual time=0.066..6.029 rows=2399 loops=1)
         ->  Hash  (cost=682.50..682.50 rows=35 width=76) (actual
time=85.297..85.297 rows=0 loops=1)
               ->  Hash Join  (cost=621.19..682.50 rows=35 width=76)
(actual time=77.796..85.258 rows=2 loops=1)
                     Hash Cond: ("outer".obchodni_pripad_id =
"inner".obchodni_pripad_id)
                     ->  Seq Scan on obchodni_pripad o  (cost=0.00..48.57
rows=2514 width=30) (actual time=0.008..4.948 rows=2514 loops=1)
                     ->  Hash  (cost=621.10..621.10 rows=35 width=50)
(actual time=76.866..76.866 rows=0 loops=1)
                           ->  Hash Join  (cost=616.61..621.10 rows=35
width=50) (actual time=76.429..76.853 rows=2 loops=1)
                                 Hash Cond: ("outer".produkt_id =
"inner".produkt_id)
                                 ->  Seq Scan on produkt p
(cost=0.00..2.66 rows=132 width=29) (actual time=0.012..0.260 rows=132
loops=1)
                                 ->  Hash  (cost=616.53..616.53 rows=35
width=29) (actual time=76.287..76.287 rows=0 loops=1)
                                       ->  Nested Loop  (cost=0.00..616.53
rows=35 width=29) (actual time=1.055..76.274 rows=2 loops=1)
                                             ->  Seq Scan on techbox t
(cost=0.00..487.16 rows=35 width=21) (actual time=0.621..75.650 rows=2
loops=1)
                                                   Filter:
(lower((value)::text) ~~ '%zemek%'::text)
                                             ->  Index Scan using cccc on
sp_op_produkt s  (cost=0.00..3.69 rows=1 width=12) (actual
time=0.277..0.284 r
ows=1 loops=2)
                                                   Index Cond:
("outer".sp_op_id = s.sp_op_id)
   ->  Hash  (cost=1.09..1.09 rows=19 width=22) (actual time=0.195..0.195
rows=0 loops=1)
         ->  Seq Scan on techreq q  (cost=0.00..1.09 rows=19 width=22)
(actual time=0.081..0.148 rows=19 loops=1)
 Total runtime: 96.596 ms
(22 řádek)



pgsql-general by date:

Previous
From: Shridhar Daithankar
Date:
Subject: Re: pg_dump, bytea, dump order questions
Next
From: "Tim Penhey"
Date:
Subject: Re: Backup and Restore of PostgreSQL