Pessoal,
Estava com alguns problemas de lock e decidi atualizar minha versão do
PostgreSQL da 8.2 para a 8.4, onde muitos avanços foram feitos nesse campo.
Contudo, para minha surpresa, a performance caiu drasticamente. O curioso é
que as máquinas físicas são idênticas fisicamente e mantive exatamente os
mesmos parâmetros de configuração para o PostgreSQL. Para se ter uma ideia
da queda, vou mostrar a saída do EXPLAIN ANALYZE para a mesma consulta nos
diferentes bancos.
*Consulta no PostgreSQL 8.2*
Sort (cost=1029.63..1029.71 rows=33 width=42) (actual
time=3895.353..3895.361 rows=67 loops=1)
Sort Key:
acs_object__name(apm_package__parent_id(public.forums_forums.package_id)),
public.forums_forums.name
-> Nested Loop (cost=39.87..1028.80 rows=33 width=42) (actual
time=743.868..3832.291 rows=67 loops=1)
-> Bitmap Heap Scan on forums_forums (cost=39.87..464.01 rows=33
width=42) (actual time=260.795..1754.423 rows=67 loops=1)
Recheck Cond: ((package_id = ANY
('{0,840191,1486834,626929,520062,1101742,1160464,1161067,2750196,3500360,133998,3673774,3676596,368
6932,4860207,5986896,10050612,10157702,4645,93855,3186091,601355,22297512,6552691,21650654,8265465,23731964,33752302,15316177}'::integer[]))
AND (en
abled_p = 't'::bpchar))
Filter: (subplan)
-> Bitmap Index Scan on forums_forums_pkg_enable_idx
(cost=0.00..39.86 rows=66 width=0) (actual time=56.270..56.270 rows=191
loops=
1)
Index Cond: ((package_id = ANY
('{0,840191,1486834,626929,520062,1101742,1160464,1161067,2750196,3500360,133998,3673774,3676596
,3686932,4860207,5986896,10050612,10157702,4645,93855,3186091,601355,22297512,6552691,21650654,8265465,23731964,33752302,15316177}'::integer[]))
AND
(enabled_p = 't'::bpchar))
SubPlan
-> Nested Loop (cost=0.00..21724.67 rows=4088 width=0)
(actual time=25.336..25.336 rows=1 loops=67)
-> Nested Loop (cost=0.00..14348.63 rows=9292
width=4) (actual time=16.059..17.942 rows=12 loops=67)
Join Filter: ((pdm.privilege)::text =
(p.privilege)::text)
-> Seq Scan on acs_privilege_descendant_map
pdm (cost=0.00..9.23 rows=4 width=16) (actual time=0.103..0.103 rows=1 lo
ops=67)
Filter: ((descendant)::text =
'read_private_data'::text)
-> Nested Loop (cost=0.00..3038.60
rows=43700 width=17) (actual time=15.022..17.830 rows=16 loops=67)
-> Index Scan using
acs_obj_ctx_idx_object_id_idx on acs_object_context_index c
(cost=0.00..17.37 rows=48 width
=4) (actual time=10.316..11.088 rows=3 loops=67)
Index Cond: (object_id = $0)
-> Index Scan using
acs_permissions_object_id_idx on acs_permissions p (cost=0.00..62.32
rows=50 width=21) (actual time=1.726..1.995 rows=5 loops=226)
Index Cond: (c.ancestor_id =
p.object_id)
-> Index Scan using party_approved_member_map_pk on
party_approved_member_map pamm (cost=0.00..0.78 rows=1 width=4) (actual
time=0.637..0.637 rows=0 loops=776)
Index Cond: ((pamm.party_id = p.grantee_id)
AND (pamm.member_id = 3443))
-> Index Scan using acs_objects_pk on acs_objects
(cost=0.00..8.82 rows=1 width=4) (actual time=16.205..16.207 rows=1
loops=67)
Index Cond: (acs_objects.object_id =
public.forums_forums.forum_id)
SubPlan
-> Index Scan using site_nodes_object_id_idx on site_nodes
(cost=0.00..8.27 rows=1 width=4) (actual time=0.581..0.582 rows=1 loops=67)
Index Cond: (object_id = $0)
Total runtime: *3895.939* ms
(27 registros)
*Consulta no PostgreSQL 8.4*
*
*
Sort (cost=3616469.97..3616470.15 rows=72 width=39) (actual
time=95704.475..95704.486 rows=67 loops=1)
Sort Key:
(acs_object__name(apm_package__parent_id(public.forums_forums.package_id))),
public.forums_forums.name
Sort Method: quicksort Memory: 35kB
-> Nested Loop Semi Join (cost=0.00..3616467.75 rows=72 width=39)
(actual time=196.064..95703.983 rows=67 loops=1)
Join Filter: (public.forums_forums.package_id = c.object_id)
-> Nested Loop (cost=0.00..663.18 rows=72 width=39) (actual
time=0.042..2.175 rows=67 loops=1)
-> Seq Scan on forums_forums (cost=0.00..31.16 rows=72
width=39) (actual time=0.017..0.899 rows=67 loops=1)
Filter: ((enabled_p = 't'::bpchar) AND (package_id =
ANY
('{0,840191,1486834,626929,520062,1101742,1160464,1161067,2750196,3500360,133998,3673774,3676596,3686932,4860207,5986896,10050612,10157702,4645,93855,3186091,601355,22297512,6552691,21650654,8265465,23731964,33752302,15316177}'::integer[])))
-> Index Scan using acs_objects_pk on acs_objects
(cost=0.00..8.77 rows=1 width=4) (actual time=0.014..0.016 rows=1 loops=67)
Index Cond: (acs_objects.object_id =
public.forums_forums.forum_id)
-> Nested Loop (cost=0.00..982907.73 rows=397639583 width=4)
(actual time=0.102..1117.157 rows=1396734 loops=67)
-> Nested Loop (cost=0.00..12218.50 rows=45973 width=4)
(actual time=0.073..0.487 rows=92 loops=67)
Join Filter: ((p.privilege)::text =
(pdm.privilege)::text)
-> Seq Scan on acs_privilege_descendant_map pdm
(cost=0.00..9.23 rows=3 width=13) (actual time=0.025..0.025 rows=1
loops=67)
Filter: ((descendant)::text =
'read_private_data'::text)
-> Nested Loop (cost=0.00..549.81 rows=281596
width=14) (actual time=0.037..0.364 rows=231 loops=67)
-> Index Scan using party_member_member_idx on
party_approved_member_map pamm (cost=0.00..25.68 rows=18 width=4) (actual
time=0.018..0.018 rows=1 loops=67)
Index Cond: (member_id = 3443)
-> Index Scan using acs_permissions_grantee_idx
on acs_permissions p (cost=0.00..28.92 rows=16 width=18) (actual
time=0.015..0.255 rows=231 loops=67)
Index Cond: (p.grantee_id = pamm.party_id)
-> Index Scan using acs_obj_ctx_idx_ancestor_idx on
acs_object_context_index c (cost=0.00..13.14 rows=638 width=8) (actual
time=0.008..6.993 rows=15182 loops=6164)
Index Cond: (c.ancestor_id = p.object_id)
SubPlan 1
-> Index Scan using site_nodes_object_id_idx on site_nodes
(cost=0.00..8.52 rows=1 width=4) (actual time=0.266..0.268 rows=1 loops=67)
Index Cond: (object_id = $0)
Total runtime: *95704.632* ms
(26 registros)
As diferenças entre as decisões tomadas pelo otimizador são tão absurdas
que não sei nem por onde começar.
Será que alguém pode me dar uma luz?
--
Eduardo Santos
Analista de Sistemas
http://eduardosan.wordpress.com
http://twitter.com/eduardosan
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral