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

Responder a