Re: [pgbr-geral] Configuração de Memória

2013-08-12 Por tôpico Emerson Martins
Boa tarde Matheus,


 Vejo que meu conhecimento sobre banco é muito menor que o seu, por
 exemplo, o que fico muito grato por estar aprendendo bastante.

 As características do ambiente de banco de dados que usamos é que são
 cerca de 50 bancos e em média 00 conexões simultâneas por banco. Esses
 valores que citei foi em decorrência de algumas documentações sugerindo
 isso. Mas sempre estou aberto a ouvir opiniões que acrescentem algo ao meu
 entendimento, por isso estou nesse fórum.


 Grato pela atenção.



Pessoal desde já agradeço o apoio de todos em me ajudar a entender melhor
como configurar a memória no PostgreSQL.
Como citado ai no meio da discussão quem utiliza ambientes mistos como é o
meu caso (Oracle,PostgreSQL,MySQL) a configuração de memória é bem
diferente.O Tunning pra o PostgreSQL é bem diferente.Não basta apenas
aumentar o shared_buffers e pronto.Muitas são as variáveis que devem ser
colocadas na mesa.

Como falei temos um BD PostgreSQL em GIS que roda muito bem e no entanto
vem apresentando lentidão.




 Em 9 de agosto de 2013 13:32, Matheus de Oliveira 
 matioli.math...@gmail.com escreveu:




 2013/8/9 Dilamar Hoffmann dilama...@gmail.com

 shared_buffers = 24GB (RAM Total - 8GB (OS e PostgreSQL)).

 Isso para que as consultas encontrem os dados em cache e não no sistema
 operacional, evitando as requisições ao sistema. Tudo depende do tamanho do
 banco de dados, numero de requisições, etc. No meu caso funciona
 perfeitamente com esses valores sem uso de swap.


 Eu não ia falar nada, mas decidi comentar porque achei a sua recomendação
 um tanto quanto exagerada. Para a maioria dos casos não é recomendado um
 valor alto assim para shared_buffers (veja que esse valor é 75% da RAM),
 apesar de ser verdade que há casos bem específicos onde esse valor pode ser
 bom. Mas já vi vários casos onde esse exagero foi prejudicial, me parece
 que é comum para quem vem do mundo Oracle, pois é uma recomendação comum
 para esse software. Entretanto os algoritmos do PostgreSQL consideram que
 há um bom cache sendo gerenciado pelo sistema operacional, assim, o
 shared_buffers muito alto pode degradar a performance (em geral devido à
 execução do do bgwriter).

 Também não acho que o fato de não entrar em swap ajude, já que o ruim é
 que o SO fica com pouca memória para cache. E, mesmo com esse valor, existe
 uma explicação para effective_cache_size = 26GB? Pois, pra mim a conta não
 bate:

 - Temos 24GB para o shared_buffers
 - Mais a possibilidade de ~ 3 * 1,5 GB devido ao maintenance_work_mem e
 autovacuum (pode não alocar tudo isso)

 Só nessa conta (sem considerar outros fatores), teríamos somente 3,5 GB
 para cache do sistema operacional, e mentir sobre isso para o PostgreSQL
 *pode* ser desastroso.

 Veja que não estou querendo te criticar, mas achei que a recomendação
 poderia prejudicar algumas pessoas sem um melhor contexto. Ainda, fiquei
 pessoalmente interessado nesse ambiente que você citou e os motivos de um
 valor tão alto ter dado ganho em performance. Pois a maioria dos casos e as
 configurações iniciais a considerar, são contrárias a isso. Pode nos falar
 mais sobre isso? Quais as características do ambiente (DW, OLTP, muita
 consulta, balanceado, usuários simultâneos, etc...)? E o tamanho da base?
 Você chegou a testar valores menores? E a verificação do uso efetivo do
 shared_buffers (a extensão pg_buffercache ajuda a analisar isso)? E ainda a
 atividade do bgwriter é muito intensa?



 Abraço.


 Em 9 de agosto de 2013 10:19, Matheus de Oliveira 
 matioli.math...@gmail.com escreveu:


 Em 8 de agosto de 2013 14:07, Emerson Martins 
 emersonmarti...@gmail.com escreveu:

 Pessoal estou aqui mais uma vez precisando da ajuda de todos para
 entender melhor como configurar esses parâmetros de memória no 
 postgres.Se
 existe alguma métrica específica para configura-los.

  shared_buffers =
  effective_cache_size =
  work_mem =
  maintenance_work_mem =

 Tomando por base um servidor com 32GB de memória e SO Linux (Debian)



  2013/8/9 Dilamar Hoffmann dilama...@gmail.com

 Bom dia Emerson,

 De acordo com esse valor de memória RAM os valores seriam:

 shared_buffers =  24GB


 Quê? 24GB de shared_buffers? E um top-posting pra complementar. Pode
 isso Arnaldo?

   effective_cache_size =  26GB
  work_mem = 8MB
  maintenance_work_mem = 1600MB



 Meio chutado esse valores, não?!

 Concordo que pode ter algumas situações onde esses valores podem ser
 bons (apesar de ser em apenas 0,0001%, ao meu ver), mas não acho legal
 apresentar valores dessa forma. O ideal, como já foi passado antes nos
 links e comentários, é entender os valores e monitorar a efetividade das
 alterações. Claro que se tem valores iniciais meio genéricos [1], que
 seriam, em geral:

 - shared_buffers = 15% a 20% da RAM, no caso dele eu começaria com 6GB
 e subiria se necessário (não mais do que 10GB ao menos que bem provado).
 Veja que existe a possibilidade de 500MB ser mais que suficiente (claro,
 para bancos pequenos), 

Re: [pgbr-geral] Configuração de Memória

2013-08-09 Por tôpico Dilamar Hoffmann
Bom dia Emerson,

De acordo com esse valor de memória RAM os valores seriam:

shared_buffers =  24GB
 effective_cache_size =  26GB
 work_mem = 8MB
 maintenance_work_mem = 1600MB




Em 8 de agosto de 2013 14:07, Emerson Martins
emersonmarti...@gmail.comescreveu:

 Pessoal estou aqui mais uma vez precisando da ajuda de todos para entender
 melhor como configurar esses parâmetros de memória no postgres.Se existe
 alguma métrica específica para configura-los.

  shared_buffers =
  effective_cache_size =
  work_mem =
  maintenance_work_mem =

 Tomando por base um servidor com 32GB de memória e SO Linux (Debian)

 Att,

 Emerson Martins


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




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


Re: [pgbr-geral] Configuração de Memória

2013-08-09 Por tôpico Matheus de Oliveira
Em 8 de agosto de 2013 14:07, Emerson Martins
emersonmarti...@gmail.comescreveu:

 Pessoal estou aqui mais uma vez precisando da ajuda de todos para entender
 melhor como configurar esses parâmetros de memória no postgres.Se existe
 alguma métrica específica para configura-los.

  shared_buffers =
  effective_cache_size =
  work_mem =
  maintenance_work_mem =

 Tomando por base um servidor com 32GB de memória e SO Linux (Debian)



2013/8/9 Dilamar Hoffmann dilama...@gmail.com

Bom dia Emerson,

 De acordo com esse valor de memória RAM os valores seriam:

 shared_buffers =  24GB


Quê? 24GB de shared_buffers? E um top-posting pra complementar. Pode isso
Arnaldo?

  effective_cache_size =  26GB
  work_mem = 8MB
  maintenance_work_mem = 1600MB



Meio chutado esse valores, não?!

Concordo que pode ter algumas situações onde esses valores podem ser bons
(apesar de ser em apenas 0,0001%, ao meu ver), mas não acho legal
apresentar valores dessa forma. O ideal, como já foi passado antes nos
links e comentários, é entender os valores e monitorar a efetividade das
alterações. Claro que se tem valores iniciais meio genéricos [1], que
seriam, em geral:

- shared_buffers = 15% a 20% da RAM, no caso dele eu começaria com 6GB e
subiria se necessário (não mais do que 10GB ao menos que bem provado). Veja
que existe a possibilidade de 500MB ser mais que suficiente (claro, para
bancos pequenos), então por que exagerar tanto no começo?

- effective_cache_size = o restante usado para cache do S.O. Em geral,
podemos dizer que seria total da RAM - shared_buffers - outras apps. Um bom
chute seria 50% da RAM, ou seja, 16GB, mas claro que também vai depender do
tamanho do banco e das tabelas.

- work_mem = esse é difícil dizer, talvez 8MB pode ser um valor inicial,
mas o ideal é monitorar o uso de arquivos temporários e aumentar se estiver
gerando muitos e muito grandes (o parâmetro log_temp_files é a maneira que
acho melhor analisar isso).

- maintenance_work_mem = é útil aumentar em SET's na sessão ao criar
índices, alter tables, etc. O padrão (no postgresql.conf) vai ser muito
útil para o autovacuum. Assim o mais agressivo que esse valor pode ser é:
tamanho da maior tabela, ou RAM disponível / 3 (o 3 seria na verdade o
autovacuum_max_workers). Eu, particularmente, não começaria com mais de
256MB (mas isso vai depender muito do banco e sua atividade - e.g. bancos
com grandes tabelas que sofram muitos UPDATEs, seria benéfico aumentar).

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


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


Re: [pgbr-geral] Configuração de Memória

2013-08-09 Por tôpico Dilamar Hoffmann
shared_buffers = 24GB (RAM Total - 8GB (OS e PostgreSQL)).

Isso para que as consultas encontrem os dados em cache e não no sistema
operacional, evitando as requisições ao sistema. Tudo depende do tamanho do
banco de dados, numero de requisições, etc. No meu caso funciona
perfeitamente com esses valores sem uso de swap.


Abraço.


Em 9 de agosto de 2013 10:19, Matheus de Oliveira matioli.math...@gmail.com
 escreveu:


 Em 8 de agosto de 2013 14:07, Emerson Martins 
 emersonmarti...@gmail.comescreveu:

 Pessoal estou aqui mais uma vez precisando da ajuda de todos para
 entender melhor como configurar esses parâmetros de memória no postgres.Se
 existe alguma métrica específica para configura-los.

  shared_buffers =
  effective_cache_size =
  work_mem =
  maintenance_work_mem =

 Tomando por base um servidor com 32GB de memória e SO Linux (Debian)



 2013/8/9 Dilamar Hoffmann dilama...@gmail.com

 Bom dia Emerson,

 De acordo com esse valor de memória RAM os valores seriam:

 shared_buffers =  24GB


 Quê? 24GB de shared_buffers? E um top-posting pra complementar. Pode isso
 Arnaldo?

   effective_cache_size =  26GB
  work_mem = 8MB
  maintenance_work_mem = 1600MB



 Meio chutado esse valores, não?!

 Concordo que pode ter algumas situações onde esses valores podem ser bons
 (apesar de ser em apenas 0,0001%, ao meu ver), mas não acho legal
 apresentar valores dessa forma. O ideal, como já foi passado antes nos
 links e comentários, é entender os valores e monitorar a efetividade das
 alterações. Claro que se tem valores iniciais meio genéricos [1], que
 seriam, em geral:

 - shared_buffers = 15% a 20% da RAM, no caso dele eu começaria com 6GB e
 subiria se necessário (não mais do que 10GB ao menos que bem provado). Veja
 que existe a possibilidade de 500MB ser mais que suficiente (claro, para
 bancos pequenos), então por que exagerar tanto no começo?

 - effective_cache_size = o restante usado para cache do S.O. Em geral,
 podemos dizer que seria total da RAM - shared_buffers - outras apps. Um bom
 chute seria 50% da RAM, ou seja, 16GB, mas claro que também vai depender do
 tamanho do banco e das tabelas.

 - work_mem = esse é difícil dizer, talvez 8MB pode ser um valor inicial,
 mas o ideal é monitorar o uso de arquivos temporários e aumentar se estiver
 gerando muitos e muito grandes (o parâmetro log_temp_files é a maneira que
 acho melhor analisar isso).

 - maintenance_work_mem = é útil aumentar em SET's na sessão ao criar
 índices, alter tables, etc. O padrão (no postgresql.conf) vai ser muito
 útil para o autovacuum. Assim o mais agressivo que esse valor pode ser é:
 tamanho da maior tabela, ou RAM disponível / 3 (o 3 seria na verdade o
 autovacuum_max_workers). Eu, particularmente, não começaria com mais de
 256MB (mas isso vai depender muito do banco e sua atividade - e.g. bancos
 com grandes tabelas que sofram muitos UPDATEs, seria benéfico aumentar).

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


 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




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


Re: [pgbr-geral] Configuração de Memória

2013-08-09 Por tôpico Matheus de Oliveira
2013/8/9 Dilamar Hoffmann dilama...@gmail.com

 shared_buffers = 24GB (RAM Total - 8GB (OS e PostgreSQL)).

 Isso para que as consultas encontrem os dados em cache e não no sistema
 operacional, evitando as requisições ao sistema. Tudo depende do tamanho do
 banco de dados, numero de requisições, etc. No meu caso funciona
 perfeitamente com esses valores sem uso de swap.


Eu não ia falar nada, mas decidi comentar porque achei a sua recomendação
um tanto quanto exagerada. Para a maioria dos casos não é recomendado um
valor alto assim para shared_buffers (veja que esse valor é 75% da RAM),
apesar de ser verdade que há casos bem específicos onde esse valor pode ser
bom. Mas já vi vários casos onde esse exagero foi prejudicial, me parece
que é comum para quem vem do mundo Oracle, pois é uma recomendação comum
para esse software. Entretanto os algoritmos do PostgreSQL consideram que
há um bom cache sendo gerenciado pelo sistema operacional, assim, o
shared_buffers muito alto pode degradar a performance (em geral devido à
execução do do bgwriter).

Também não acho que o fato de não entrar em swap ajude, já que o ruim é que
o SO fica com pouca memória para cache. E, mesmo com esse valor, existe uma
explicação para effective_cache_size = 26GB? Pois, pra mim a conta não bate:

- Temos 24GB para o shared_buffers
- Mais a possibilidade de ~ 3 * 1,5 GB devido ao maintenance_work_mem e
autovacuum (pode não alocar tudo isso)

Só nessa conta (sem considerar outros fatores), teríamos somente 3,5 GB
para cache do sistema operacional, e mentir sobre isso para o PostgreSQL
*pode* ser desastroso.

Veja que não estou querendo te criticar, mas achei que a recomendação
poderia prejudicar algumas pessoas sem um melhor contexto. Ainda, fiquei
pessoalmente interessado nesse ambiente que você citou e os motivos de um
valor tão alto ter dado ganho em performance. Pois a maioria dos casos e as
configurações iniciais a considerar, são contrárias a isso. Pode nos falar
mais sobre isso? Quais as características do ambiente (DW, OLTP, muita
consulta, balanceado, usuários simultâneos, etc...)? E o tamanho da base?
Você chegou a testar valores menores? E a verificação do uso efetivo do
shared_buffers (a extensão pg_buffercache ajuda a analisar isso)? E ainda a
atividade do bgwriter é muito intensa?



 Abraço.


 Em 9 de agosto de 2013 10:19, Matheus de Oliveira 
 matioli.math...@gmail.com escreveu:


 Em 8 de agosto de 2013 14:07, Emerson Martins 
 emersonmarti...@gmail.comescreveu:

 Pessoal estou aqui mais uma vez precisando da ajuda de todos para
 entender melhor como configurar esses parâmetros de memória no postgres.Se
 existe alguma métrica específica para configura-los.

  shared_buffers =
  effective_cache_size =
  work_mem =
  maintenance_work_mem =

 Tomando por base um servidor com 32GB de memória e SO Linux (Debian)



  2013/8/9 Dilamar Hoffmann dilama...@gmail.com

 Bom dia Emerson,

 De acordo com esse valor de memória RAM os valores seriam:

 shared_buffers =  24GB


 Quê? 24GB de shared_buffers? E um top-posting pra complementar. Pode isso
 Arnaldo?

   effective_cache_size =  26GB
  work_mem = 8MB
  maintenance_work_mem = 1600MB



 Meio chutado esse valores, não?!

 Concordo que pode ter algumas situações onde esses valores podem ser bons
 (apesar de ser em apenas 0,0001%, ao meu ver), mas não acho legal
 apresentar valores dessa forma. O ideal, como já foi passado antes nos
 links e comentários, é entender os valores e monitorar a efetividade das
 alterações. Claro que se tem valores iniciais meio genéricos [1], que
 seriam, em geral:

 - shared_buffers = 15% a 20% da RAM, no caso dele eu começaria com 6GB e
 subiria se necessário (não mais do que 10GB ao menos que bem provado). Veja
 que existe a possibilidade de 500MB ser mais que suficiente (claro, para
 bancos pequenos), então por que exagerar tanto no começo?

 - effective_cache_size = o restante usado para cache do S.O. Em geral,
 podemos dizer que seria total da RAM - shared_buffers - outras apps. Um bom
 chute seria 50% da RAM, ou seja, 16GB, mas claro que também vai depender do
 tamanho do banco e das tabelas.

 - work_mem = esse é difícil dizer, talvez 8MB pode ser um valor inicial,
 mas o ideal é monitorar o uso de arquivos temporários e aumentar se estiver
 gerando muitos e muito grandes (o parâmetro log_temp_files é a maneira que
 acho melhor analisar isso).

 - maintenance_work_mem = é útil aumentar em SET's na sessão ao criar
 índices, alter tables, etc. O padrão (no postgresql.conf) vai ser muito
 útil para o autovacuum. Assim o mais agressivo que esse valor pode ser é:
 tamanho da maior tabela, ou RAM disponível / 3 (o 3 seria na verdade o
 autovacuum_max_workers). Eu, particularmente, não começaria com mais de
 256MB (mas isso vai depender muito do banco e sua atividade - e.g. bancos
 com grandes tabelas que sofram muitos UPDATEs, seria benéfico aumentar).

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


 Atenciosamente,
 --
 

[pgbr-geral] Configuração de Memória

2013-08-08 Por tôpico Emerson Martins
Pessoal estou aqui mais uma vez precisando da ajuda de todos para entender
melhor como configurar esses parâmetros de memória no postgres.Se existe
alguma métrica específica para configura-los.

 shared_buffers =
 effective_cache_size =
 work_mem =
 maintenance_work_mem =

Tomando por base um servidor com 32GB de memória e SO Linux (Debian)

Att,

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


Re: [pgbr-geral] Configuração de Memória

2013-08-08 Por tôpico Juliano Atanazio
Em 8 de agosto de 2013 14:07, Emerson Martins
emersonmarti...@gmail.comescreveu:

 Pessoal estou aqui mais uma vez precisando da ajuda de todos para entender
 melhor como configurar esses parâmetros de memória no postgres.Se existe
 alguma métrica específica para configura-los.

  shared_buffers =
  effective_cache_size =
  work_mem =
  maintenance_work_mem =



Creio que isto pode te dar uma ajuda:

http://www.fernandoike.com/2013/08/06/postgresql-tuning-preludio/



 Tomando por base um servidor com 32GB de memória e SO Linux (Debian)

 Att,

 Emerson Martins


 ___
 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


Re: [pgbr-geral] Configuração de Memória

2013-08-08 Por tôpico Emerson Martins
 Em 8 de agosto de 2013 14:07, Emerson Martins 
 emersonmarti...@gmail.comescreveu:

 Pessoal estou aqui mais uma vez precisando da ajuda de todos para entender
 melhor como configurar esses parâmetros de memória no postgres.Se existe
 alguma métrica específica para configura-los.

  shared_buffers =
  effective_cache_size =
  work_mem =
  maintenance_work_mem =



 Creio que isto pode te dar uma ajuda:

 http://www.fernandoike.com/2013/08/06/postgresql-tuning-preludio/



 Obrigado Juliano!
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral