Caros Colegas, Há algum tempo estava analisando uma base de dados e verifiquei que diversas colunas das tabelas dessa base estavam com a coleta de estatisticas desabilitada. Na saida de um dump da estrutura da base encontrei algo como:
ALTER TABLE tabela ALTER COLUMN coluna SET STATISTICS 0; Essa desativação não estava em TODAS colunas das tabelas da base de dados, verifiquei isso facilmente com alguns SQLs, dentre eles: SELECT * FROM pg_attribute WHERE attstattarget = 0 AND attnum > 0; Fiquei surpreso que essas estatisticas estivessem desabilitadas então resolvi logo habilitadas (colocando o valor -1 pra buscar da configuração do postgresql.conf conforme documentação oficial) mas o que fiquei mais surpreso ainda foi com o resultado... foi desastroso pois degradou a performance das queries... e naquele final de semana, oportunamente, foi executado um REINDEX DATABASE e após um VACUUM ANALYZE, este último é executado diariamente... Verifiquei todas configurações (shared_mem, work_mem, effetive_cache_size, etc...) para ver se conseguiria mudar o resultado pois uma simples consulta que demorava de ~3seg começou a demorar ~907seg... muita diferença não é mesmo... Com isso fui fazer uns EXPLAINs das queries no servidor que habilitei as estatisticas para comparar com outro onde as estatisticas ainda estavam desabilitadas e, É ÓBVIO, deu diferença no resultado dos EXPLAINs... até ai sem problemas, o problema é que com a estatisticas HABILITADAS ficou MUITO PIOR... será que não deveria ficar melhor?? A diferença significativa no resultado dos EXPLAINs é que na base que as estatisticas estavam desabilitadas no resultado tinha um "BITMAP HEAP SCAN" resultando num custo bem menor que o da base que as estatisticas estavam habilitadas o qual não fazia esse bitmap_scan, fazendo um index_scan normal... e não se preocupem que verifiquei e NOS 2 SERVIDORES as configurações dos métodos do planejador estão iguais: enable_bitmapscan = on enable_hashagg = on enable_hashjoin = on enable_indexscan = on enable_mergejoin = on enable_nestloop = on enable_seqscan = off enable_sort = on enable_tidscan = off Com isso tudo, sem entender nada e ter levado uma surra do elefantinho resolvi tomar a seguinte "medida DRÁSTICA": 1) Desabilitei as COLUNAS que assim estavam antes do "meu ato heróico" de habilitalas (deixei a base de dados no estado original) 2) Rodei um DELETE na pg_statistic... isso mesmo... um DELETE nela... 3) Rodei um ANALYZE na base de dados... Meus amigos adivinhem o resultado... as queries voltaram ao normal... exatamente como eram antes... tudo rápido q é uma beleza... a query que demorava ~907seg antes desse procedimento voltou a demorar apenas ~3seg... Agora gostaria de saber se algum dos colegas sabe o porque desse comportamento, no mínimo estranho e/ou duvidoso, do planejador do nosso amigo PostgreSQL. Cordialmente, -- Fabrízio de Royes Mello Coordenador Desenvolvimento de Software [EMAIL PROTECTED] DBSeller Informática Ltda. - http://www.dbseller.com.br (51) 3076-5101 _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
