2014-08-04 5:09 GMT-03:00 Flavio Henrique Araque Gurgel <[email protected]>:
> Bruno >> >> Como esse servidor tem "razoavel" memória, acredito que o Otimizador do >> SGBD ache mais barato resolver a query em memória do que utilizar >> índice. Outro fato que acredito nisso, é que a memória é maior que a >> maior tabela (16gb). >> > > O otimizador só vai achar isso se estiver configurado para tal, > configuração effective_cache_size. > > > Se fosse no Oracle, iria te falar para por um HINT para forçar o >> Otimizador a utilizar o índice, mas no postgresql nao sei se aceita >> Hints. Outra coisa que poderia fazer é filtrar primeiro os predicados >> > > Não, o PostgreSQL não aceita hints e nunca aceitará. É um erro achar que > hints são uma solução para esse tipo de problemas, normalmente eles causam > mais problemas do que resolvem. Nem sempre usar um índice é o melhor > caminho para uma consulta e isso varia com o volume das tabelas envolvidas. > > > mais restritivos através de alias de tabela +- como abaixo, assim na >> hora da junção teria menos dados para fazer os Hash Join ou Nested Loop: >> >> SELECT * >> FROM C1, >> ( SELECT * FROM C2 WHERE FILTRO = QUALQUER ) C2A >> WHERE >> .... >> > > Você olhou a consulta do colega antes de dizer isso? > > > > Boa noite, estou fazendo análise de uma consulta e ela está >> extremamente lenta. Não consigo entender o motivo. >> Fazendo alguns testes vi que precisava de alguns índices e os criei, >> porém o Postgres não está utilizando eles. >> Esse [1] é o resultado do analyze da consulta[2] já com os índices >> criados. >> Já atualizei as estatísticas e nada. >> Os parâmetros dessa máquina são: >> work_mem=2GB >> shared_buffers=3GB >> effective_cache_size=16GB >> > > Aqui está o effective_cache_size que o outro colega não viu (afinal com > top posting é difícil mesmo separar tudo). > > temp_buffers=1GB >> > > Muito. Diminua isso. Não faz sentido e só ocupa espaço do seu > shared_buffers. Uns 8MB tá de bom tamanho. Ajustado > > > >> A máquina tem 96GB de RAM, é um Intel(R) Xeon(R) CPU X5680 @ >> 3.33GHz, com 24 cores e tem tablespace separadas pros índices e a >> maior tabela ( movimentacao - 16GB ) está em outro tablespace também. >> >> [1] http://explain.depesz.com/s/fAjE >> [2] http://pastebin.com/rJVUBVp0 >> > > A parte mais cara da sua consulta, de acordo com o explain, é: > > WHERE (movjulg.bolcancelado IS FALSE > AND movjulg.dtamovimento <= '2013-12-31 23:59:59-03') > > Poderia verificar se existem índices nessas colunas? caso haja, a > distribuição estatística dos dados nelas pode afetar o plano também. > Mostre-nos mais detalhes, por favor, dessa tabela e essas colunas. > Flávio, seguem os detalhes, desculpe a forma de apresentação da estrutura: Table "base.movimentacao" Column | Type | Modifiers | Storage | Stats target | Description -------------------------------+-----------------------------+-----------+----------+--------------+------------- tblorigem | character varying(22) | | extended | | intmovimentacaoid | integer | | plain | | intmunicipiocomarcaid | integer | | plain | | pk_processo | bigint | | plain | | strtipomovimentacao | text | | extended | | bolgeracustas | character varying(1) | | extended | | strtipomovimentacaoresumida | text | | extended | | intjuizid | integer | | plain | | dtacadastro | date | | plain | | intprocessoparteid | integer | | plain | | intmovimentoanteriorid | integer | | plain | | intsetororigemid | integer | | plain | | intsetordestinoid | integer | | plain | | inttipoconclusaoid | integer | | plain | | intdocumentogrupoid | integer | | plain | | intsituacaoeventoid | integer | | plain | | intdestinatarioid | integer | | plain | | inttipopeticaoid | integer | | plain | | dtacancelamento | date | | plain | | intjuizcancelamentoid | integer | | plain | | intusuariocancelamentoid | integer | | plain | | intescrivaoid | integer | | plain | | intcartorioid | integer | | plain | | intprocessostatusid | integer | | plain | | intperfilid | integer | | plain | | intsetorid | integer | | plain | | intvaraid | integer | | plain | | strjuiz | character varying(200) | | extended | | intsentencaid | integer | | plain | | dtaprolatacao | date | | plain | | bolcanceladasentenca | character varying(1) | | extended | | intjuizsentencaid | integer | | plain | | strjuizsentenca | text | | extended | | intmovimentoid | integer | | plain | | dtamovimento_old | date | | plain | | strtipomovimento | text | | extended | | bolisentacustas | character varying(1) | | extended | | inttipomovimentoid | integer | | plain | | strjustificativaisencaocustas | text | | extended | | stratopublicado | text | | extended | | dtaevento | timestamp without time zone | | plain | | strlocalevento | character varying(200) | | extended | | bolcancelado | boolean | | plain | | strjustificativacancelamento | text | | extended | | stroficiocancelamento | character varying(50) | | extended | | bolvistosemcorreicao | character varying(1) | | extended | | bolautomatico | character varying(1) | | extended | | strtipomovimentocnj | text | | extended | | strtipomovimentocnjdescricao | text | | extended | | setor_origem | character varying(100) | | extended | | setor_destino | character varying(100) | | extended | | dtamovimentoanterior | date | | plain | | dtamovimento | timestamp with time zone | | plain | | Indexes: "ix_movimentacao_04" btree (pk_processo, intmunicipiocomarcaid, dtamovimento_old) WHERE dtamovimento_old IS NOT NULL "ix_movimentacao_06" btree (intmunicipiocomarcaid, pk_processo, inttipomovimentoid) "ix_movimentacao_08" btree (pk_processo, intmunicipiocomarcaid, intvaraid, inttipomovimentoid) "ix_movimentacao_09" btree (dtamovimento) WHERE bolcancelado IS FALSE, tablespace "idxs" "ix_movimentacao_10" btree (dtamovimento DESC) WHERE bolcancelado IS FALSE "ix_movimentacao_11" btree (intmunicipiocomarcaid, pk_processo, inttipomovimentoid, dtamovimento DESC) WHERE bolcancelado IS FALSE > > []s Bruno E. A. Silva. Analista de Sistemas. Bacharel em Sistemas de Informação MBA Gerência de Projetos Certified Scrum Master LPIC-1 SCJP, SE 6 Novell CLA / DCTS ECR DBA Postgres ------------------------------- “A caixa dizia: Requer MS Windows ou superior. Então instalei Linux.” - Sábio Desconhecido "Alguns prestam serviço/consultoria de Qualidade, os outros vendem licença!"
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
