2013/7/2 Flavio Henrique Araque Gurgel <fla...@4linux.com.br>

> Em 02-07-2013 11:36, Luiz Carlos L. Nogueira Jr. escreveu:
>
>> De 50MB para 4MB me parece uma mudança muito brusca!
>>
>> *-Essa alteração foi solicitada pelo pessoal que desenvolve o sistema
>> (CNJ). Fomos obrigados a implantar*
>>
>
> Bom, fica difícil ajudar a resolver seu problema se você não tem autonomia
> ou puder sugerir ajustes, certo :)
>
>
Mas então acho que você poderia pelo menos analisar a consulta e sugerir a
solução correta com valores mais palpáveis. A minha impressão (pela mudança
de 50MB para 4MB do work_mem) é que esses valores estão sendo chutados ao
acaso.



>  *É dedicado, com 8 cores, 32 GB de memória. Uma máquina muito boa
>> O estranho é que não entra na área de swap quando o out of memory ocorre,*
>>
>
> Onde você viu esse out-of-memory? Log? Tem a mensagem exata?
> Pelo que você tem falado, não parece ter havido consumo de sua memória RAM
> toda.
>
>
Concordo com o Gurgel. Qual o erro exato que você está vendo?

Ainda, quanto de swap você tem? Certeza que está ativo? Por favor, poste o
resultado do comando:

$ free -m

 Você ainda poderá ter problema de performance (ou não), mas se
>> out-of-memory for uma situação com baixa frequência, então isso
>> resolveria.
>> *Não resolveu. temos que reiniciar os serviços várias vezes durante o dia*
>>
>
> Faço a mesma pergunta acima.
>
>
>  É difícil determinar com certeza, mas pelas médias, vários desses
>> arquivos estão com menos de 2MB, logo um work_mem de 6MB já poderia
>> evitar boa parte desses.
>>
>> Como temos memória suficiente, iria sugerir 10MB, pra evitar ao máximo o
>> uso de disco, fora que não temos tantas transações simultâneas.
>> Eu acho que 6MB de work_mem
>>
>
>
Como eu já tinha dito, olhando por cima recomendaria 10MB. Ainda mais agora
que sei que a máquina tem 32GB (diria até mais). E mais, qual o valor do
shared_buffers? Aliás, de preferência o valor de todas variáveis não
padrões, poste o resultado da consulta [1].


> Lembrando que o ajuste de work_mem não depende de reinício do servidor.
> Você pode fazer a alteração no conf e dar um reload.
> Você também pode fazer para o usuário da aplicação:
> ALTER USER blabla SET work_mem='10MB';
>
>
Isso mesmo... =D


> Lembre-se que apenas as novas conexões irão se aproveitar disso, as já
> existentes irão ficar com o valor anterior (em ambos os casos de ajuste),
> portanto, como sua aplicação é Java com Hibernate provavelmente tem um pool
> que mantem as conexões abertas, seria legal reiniciar o servidor de
> aplicação ou forçar as conexões a serem encerradas com pg_terminate_backend
> (o pool abre de novo logo após).
>
>
Não precisa disso, o work_mem irá ser alterado nas conexões abertas também.
Claro que não para as consultas já em progresso.

[1] http://wiki.postgresql.org/wiki/Server_Configuration

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a