De: "Fábio Telles Rodriguez" <fabio.tel...@gmail.com> 
Para: "Comunidade PostgreSQL Brasileira" <pgbr-geral@listas.postgresql.org.br> 
Enviadas: Quarta-feira, 6 de setembro de 2017 12:34:38 
Assunto: Re: [pgbr-geral] Ajuda parâmetro work_mem 



Em 6 de setembro de 2017 11:19, Neto pr < neto...@gmail.com > escreveu: 


Pessoal 

Já li em alguns foruns como abaixo, que alterar o Shared_Buffer para 
deixar mais memória RAM disponível p/ o SGBD as vezes acaba por 
diminuir o desempenho: 

https://www.postgresql.org/message-id/CACezXZ_w7HbqSxZ=5SJH=kxb4nbdnbpdejttsau6ec1aeo4...@mail.gmail.com
 

Mas e no caso do Work_Mem, responsável por limitar a quantidade de 
memória RAM para o operacões de classificacão e ordenacão para uma 
única operacão, será que teria algum efeito colateral em alterar isso, 
para uma quantidade maior? 

Estou fazendo testes com o benchmark TPCH e quase todas as consultas 
tem group e order by. 
https://www.maxwell.vrac.puc-rio.br/acessoConteudo.php?nrseqoco=42150 
(pagina 37) 

Peguei duas indicacões pelas ferramentas abaixo, no meu caso estou com 
um Servidor dedicado e com poucas conexões sendo utilizadas, no máximo 
10, e vejam o que foi me indicado: 

- pgtune = 104 MB (para 10 conexões no máximo). 
- pgconfig.org = 410 MB (para 10 conexões no máximo) 

Alguma opinião se a alteracão desse parametro, traria algum efeito 
maléfico no desempenho? 
Que valores utilizam x conexões? 

Os outros parametros eu utilizo o padrão, a versão do postgresql é a 
10b3, Proc Xeon 2.8GHz/4-core- 8gb Ram, SO Debian 8. 



O valor do WORK_MEM deve ser o maior possível. Mas o melhor valor pode variar 
um pouco com o seu ambiente. Primeiro eu deixo para logar por um tempo no 
servidor a criação de tabelas temporárias. Depois gero um relatório com o 
pgBadger e avalio a geração de arquivos temporários no pgBadger. 
- Se o volume de tabelas temporárias criadas em disco for muito pequeno, é 
sinal de que não há muita necessidade de aumentar o WORK_MEM. 
- Se apenas algumas sessões estão gerando grandes arquivos temporários, eu 
tento ajustar o WORK_MEM maior só para aquelas sessões ou usuários. 
- Se muitas sessões estão gerando arquivos temporários eu aumento o WORK_MEM 
globalmente. 

Em geral ajusto o MAX_CONNECTIONS x WORK_MEM para algo entre 25% a 50% da RAM 
do servidor. Mas isso é apenas um chute inicial, imaginando que teremos 25% 
para o SHARED_BUFFERS e 25% para as sessões e 50% para o cache do SO. 

-- 
Atenciosamente, 
Fábio Telles Rodriguez 
blog: http:// s avepoint.blog.br 
e-mail / gtalk / MSN: fabio.tel...@gmail.com 
Skype: fabio_telles 

Timbira - A empresa brasileira de Postgres 
http://www.timbira.com.br 

Fábio, 

Sei que não é o foco do tópico, mas fiquei com dúvida no cálculo da memória 
para o PostgreSQL, porque existe muitas fôrmulas na internet. Porém, é tudo 
empirico, não visualizei nenhum tópico até hoje que explica porque das 
configurações. 
Eu por exemplo, sempre utilizei essa: Calculo da memória = (shared_buffers + ( 
2 * max_connections * work_mem) + ( autovacuum_max_workers * 
maintenance_work_mem) ) 
Outra dúvida do work_mem, com esse acompanhamento é se seria possível 
acompanhar a quantidade de work_mem utilizada para operações de ordenação, join 
e distinct, nas consultas. Nesse mesmo acompanhamento para tabelas temporárias 
seria possível visualizar isso? 

Obrigado. 

_______________________________________________ 
pgbr-geral mailing list 
pgbr-geral@listas.postgresql.org.br 
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral 

-- 
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a