Re: [pgbr-geral] Dúvida sobre WORK_MEM

2011-04-06 Por tôpico Fábio Telles Rodriguez
Em 5 de abril de 2011 19:55, Flavio Henrique Araque Gurgel
fha...@gmail.com escreveu:
           Apenas para ratificar então, o work_mem é por conexão, mas é um
 limitador apenas, não uma memória préalocada, ok?

 O work_mem não é por conexão.

Não é esta a minha interpretação e a minha experiência.
 Do manual:
 Note that for a complex query, several sort or hash operations might
 be running in parallel; each operation will be allowed to use as much
 memory as this value specifies before it starts to write data into
 temporary files.

Tradução livre: Note que para uma consulta complexa, algumas
operações de hash ou ordenação poderão estar rodando em paralelo; cada
operação poderá usar tanta memória quanto o especificado por este
valor, antes de iniciar a escrita nos arquivos temporários.


 Explica que o work_mem pode ser alocado diversas vezes numa consulta complexa.
 Sim, o work_mem é um limite, não é uma alocação imediata.
Ok, mas é um limite POR sessão e não para todo o cluster, como é o
SHARED_BUFFERS. Confere?

Apenas reforçando, logo em seguida, na mesma documentação temos:

Also, several running sessions could be doing such operations
concurrently. Therefore, the total memory used could be many times the
value of work_mem; it is necessary to keep this fact in mind when
choosing the value.

Tradução livre: Além disso, várias sessões podem estar rodando estas
operações concorrentemente. Então o total de memória utilizada pode
ser várias vezes o valor de WORK_MEM; é necessário ter este fato em
mente quando for escolher este valor.

Desta forma, o cálculo do WORK_MEM deve sim levar em conta o número
máximo de conexões. Veja a recomendação do Gregory Smith em
PostgreSQL 9.0 Hight Performance:

In practice, there aren't that many sorts going on in a typical
query, usually only
one or two. And not every client that's active will be sorting at the
same time. The
normal guidance for work_mem is to consider how much free RAM is around after
shared_buffers is allocated (the same OS caching size figure needed to compute
effective_cache_size), divide by max_connections, and then take a fraction of
that figure; a half of that would be an aggressive work_mem value. In
that case, only
if every client had two sorts active all at the same time would the
server be likely
to run out of memory, which is an unlikely scenario.

Espero com isso ter clareado o assunto.

-- 
Atenciosamente,
Fábio Telles Rodriguez
blog: http://www.midstorm.org/~telles/
e-mail / gtalk / MSN: fabio.tel...@gmail.com
Skype: fabio_telles
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Dúvida sobre WORK_MEM

2011-04-06 Por tôpico Euler Taveira de Oliveira
Em 05-04-2011 19:55, Flavio Henrique Araque Gurgel escreveu:
 O work_mem não é por conexão.

O valor de work_mem não é nem por conexão nem por agrupamento. Numa mesma 
consulta o valor utilizado pode ser n * work_mem, onde n depende da consulta. 
Eu utilizo um método diferente dos colegas: (i) ajusto um valor baixo 
(tipicamente 1MB ou 2MB), (ii) habilito a gravação de todos os arquivos 
temporários (log_temp_files = 0), (iii) coleto os valores do log após algum 
tempo e (iv) avalio o desvio padrão e a regularidade das consultas para pegar 
um valor entre o 75º percentil e 95º percentil.


-- 
   Euler Taveira de Oliveira
   http://www.timbira.com/
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Dúvida sobre WORK_MEM

2011-04-06 Por tôpico Roberto Mello
2011/4/6 Euler Taveira de Oliveira eu...@timbira.com

 O valor de work_mem não é nem por conexão nem por agrupamento. Numa mesma
 consulta o valor utilizado pode ser n * work_mem, onde n depende da
 consulta.
 Eu utilizo um método diferente dos colegas: (i) ajusto um valor baixo
 (tipicamente 1MB ou 2MB), (ii) habilito a gravação de todos os arquivos
 temporários (log_temp_files = 0), (iii) coleto os valores do log após algum
 tempo e (iv) avalio o desvio padrão e a regularidade das consultas para
 pegar
 um valor entre o 75º percentil e 95º percentil.


Gostei!

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


Re: [pgbr-geral] Dúvida sobre WORK_MEM

2011-04-06 Por tôpico Fábio Telles Rodriguez
Em 6 de abril de 2011 09:34, Euler Taveira de Oliveira
eu...@timbira.com escreveu:
 Em 05-04-2011 19:55, Flavio Henrique Araque Gurgel escreveu:
 O work_mem não é por conexão.

 O valor de work_mem não é nem por conexão nem por agrupamento. Numa mesma
 consulta o valor utilizado pode ser n * work_mem, onde n depende da consulta.
 Eu utilizo um método diferente dos colegas: (i) ajusto um valor baixo
 (tipicamente 1MB ou 2MB), (ii) habilito a gravação de todos os arquivos
 temporários (log_temp_files = 0), (iii) coleto os valores do log após algum
 tempo e (iv) avalio o desvio padrão e a regularidade das consultas para pegar
 um valor entre o 75º percentil e 95º percentil.

Perfeito. Gostei mesmo. Vou testar.

[]s
-- 
Atenciosamente,
Fábio Telles Rodriguez
blog: http://www.midstorm.org/~telles/
e-mail / gtalk / MSN: fabio.tel...@gmail.com
Skype: fabio_telles
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Dúvida sobre WORK_MEM

2011-04-06 Por tôpico Fábio Gibon - Comex System
O que é o estudo...:)

Vou testar assim, muito obrigado.

sds
Fábio Gibon
- Original Message - 
From: Euler Taveira de Oliveira eu...@timbira.com
To: pgbr-geral@listas.postgresql.org.br
Sent: Wednesday, April 06, 2011 9:34 AM
Subject: Re: [pgbr-geral] Dúvida sobre WORK_MEM


Em 05-04-2011 19:55, Flavio Henrique Araque Gurgel escreveu:
 O work_mem não é por conexão.

O valor de work_mem não é nem por conexão nem por agrupamento. Numa mesma
consulta o valor utilizado pode ser n * work_mem, onde n depende da
consulta.
Eu utilizo um método diferente dos colegas: (i) ajusto um valor baixo
(tipicamente 1MB ou 2MB), (ii) habilito a gravação de todos os arquivos
temporários (log_temp_files = 0), (iii) coleto os valores do log após algum
tempo e (iv) avalio o desvio padrão e a regularidade das consultas para
pegar
um valor entre o 75º percentil e 95º percentil.


-- 
   Euler Taveira de Oliveira
   http://www.timbira.com/
___
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] Dúvida sobre WORK_MEM

2011-04-05 Por tôpico Flavio Henrique Araque Gurgel
           Apenas para ratificar então, o work_mem é por conexão, mas é um
 limitador apenas, não uma memória préalocada, ok?

O work_mem não é por conexão.
Do manual:
Note that for a complex query, several sort or hash operations might
be running in parallel; each operation will be allowed to use as much
memory as this value specifies before it starts to write data into
temporary files.
Explica que o work_mem pode ser alocado diversas vezes numa consulta complexa.
Sim, o work_mem é um limite, não é uma alocação imediata.

Minha regra de ouro pra evitar falta de memória num servidor PostgreSQL:
shared_buffers + 2 * work_mem * max_connections + maintenance_work_mem
* autovacuum_max_workers  RAM disponível

Lembrando que RAM disponível é o que sobra dela, subtraia aí o que
seu SO precisa pra rodar e outras eventuais aplicações na mesma
máquina.

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


Re: [pgbr-geral] Dúvida sobre WORK_MEM

2011-04-05 Por tôpico Fábio Gibon - Comex System
Valeu Flávio,
 vou comparar sua regra com algumas configurações que costumo fazer.

um abraço
Fábio Gibon
- Original Message - 
From: Flavio Henrique Araque Gurgel fha...@gmail.com
To: Fábio Gibon - Comex System gi...@comexsystem.com.br; Comunidade 
PostgreSQL Brasileira pgbr-geral@listas.postgresql.org.br
Sent: Tuesday, April 05, 2011 7:55 PM
Subject: Re: [pgbr-geral] Dúvida sobre WORK_MEM


 Apenas para ratificar então, o work_mem é por conexão, mas é um
 limitador apenas, não uma memória préalocada, ok?

O work_mem não é por conexão.
Do manual:
Note that for a complex query, several sort or hash operations might
be running in parallel; each operation will be allowed to use as much
memory as this value specifies before it starts to write data into
temporary files.
Explica que o work_mem pode ser alocado diversas vezes numa consulta 
complexa.
Sim, o work_mem é um limite, não é uma alocação imediata.

Minha regra de ouro pra evitar falta de memória num servidor PostgreSQL:
shared_buffers + 2 * work_mem * max_connections + maintenance_work_mem
* autovacuum_max_workers  RAM disponível

Lembrando que RAM disponível é o que sobra dela, subtraia aí o que
seu SO precisa pra rodar e outras eventuais aplicações na mesma
máquina.

[]s
Flavio

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


Re: [pgbr-geral] Dúvida sobre WORK_MEM

2011-04-04 Por tôpico Fábio Telles Rodriguez
Em 4 de abril de 2011 11:15, Fábio Gibon - Comex System
gi...@comexsystem.com.br escreveu:
 Pessoal,
     por favor, vejam se o conceito que tenho de work_mem está correto:

 work_mem: é um limite de memória (apenas um limite, não é prealocada) para
 operações de sort (order by, distinct, ...) antes de ter que utilizar disco
 para isto. É um valor total para o cluster, não por
 client/session/transaction...

Não está correto. O valor é um limite por conexão, não é global para o cluster.

 A minha dúvida é como consigo mensurar o uso da work_mem para saber se está
 super/sub dimensionada? Tem alguma view para isto?

Uma forma simples de saber isso é criar uma tablespace temporário numa
partição específica e monitorar o uso da partição. Sempre que uma
operação for utilizar mais que o disponível em work_men, a sessão irá
utilizar o disco, na partição especificada. Se você tiver muito I/O
nesta partição, então poderá se beneficiar do aumento do WORK_MEM.

Você também pode setar este parâmetro por sessão/usuário/base. Então,
se você tem operações muito específicas que vão fazer um SORT muito
grande, pode ajustar este parâmetro apenas neste momento e deixar o
restante com o valor padrão.

Uma forma de fazer um ajuste grosso neste parâmetro é verificar a
quantidade de memória disponível logo após a inicialização do Postgres
(após a alocação dos SHARED_BUFFERs) mas sem conexões ativas. Pegue o
total de memória disponível e divida pelo número máximo de conexões em
MAX_CONNECTIONS. Deste valor, pegue apenas uma fração, como 1/3 disso.

EX: Memória total = 16GB. Após subir o PostgreSQL a memória livre é de
4GB. Se o seu MAX_CONNECTIONS estiver em 100, teremos: 4G/100 = 40MB.
Você poderia utilizar com segurança algo entre 10MB e 20MB.



 abraços

 Fábio Henrique Gibon
 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral





-- 
Atenciosamente,
Fábio Telles Rodriguez
blog: http://www.midstorm.org/~telles/
e-mail / gtalk / MSN: fabio.tel...@gmail.com
Skype: fabio_telles
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Dúvida sobre WORK_MEM

2011-04-04 Por tôpico Fábio Gibon - Comex System
Fábio Rodriguez,
   obrigado pelo retorno.

   Apenas para ratificar então, o work_mem é por conexão, mas é um
limitador apenas, não uma memória préalocada, ok?

   E via banco não tem como monitorar o uso desta então? (tipo
pg_stat_temp...)

sds
Fábio Gibon
- Original Message - 
From: Fábio Telles Rodriguez fabio.tel...@gmail.com
To: Fábio Gibon - Comex System gi...@comexsystem.com.br; Comunidade 
PostgreSQL Brasileira pgbr-geral@listas.postgresql.org.br
Sent: Monday, April 04, 2011 12:50 PM
Subject: Re: [pgbr-geral] Dúvida sobre WORK_MEM


Em 4 de abril de 2011 11:15, Fábio Gibon - Comex System
gi...@comexsystem.com.br escreveu:
 Pessoal,
 por favor, vejam se o conceito que tenho de work_mem está correto:

 work_mem: é um limite de memória (apenas um limite, não é prealocada) para
 operações de sort (order by, distinct, ...) antes de ter que utilizar 
 disco
 para isto. É um valor total para o cluster, não por
 client/session/transaction...

Não está correto. O valor é um limite por conexão, não é global para o 
cluster.

 A minha dúvida é como consigo mensurar o uso da work_mem para saber se 
 está
 super/sub dimensionada? Tem alguma view para isto?

Uma forma simples de saber isso é criar uma tablespace temporário numa
partição específica e monitorar o uso da partição. Sempre que uma
operação for utilizar mais que o disponível em work_men, a sessão irá
utilizar o disco, na partição especificada. Se você tiver muito I/O
nesta partição, então poderá se beneficiar do aumento do WORK_MEM.

Você também pode setar este parâmetro por sessão/usuário/base. Então,
se você tem operações muito específicas que vão fazer um SORT muito
grande, pode ajustar este parâmetro apenas neste momento e deixar o
restante com o valor padrão.

Uma forma de fazer um ajuste grosso neste parâmetro é verificar a
quantidade de memória disponível logo após a inicialização do Postgres
(após a alocação dos SHARED_BUFFERs) mas sem conexões ativas. Pegue o
total de memória disponível e divida pelo número máximo de conexões em
MAX_CONNECTIONS. Deste valor, pegue apenas uma fração, como 1/3 disso.

EX: Memória total = 16GB. Após subir o PostgreSQL a memória livre é de
4GB. Se o seu MAX_CONNECTIONS estiver em 100, teremos: 4G/100 = 40MB.
Você poderia utilizar com segurança algo entre 10MB e 20MB.



 abraços

 Fábio Henrique Gibon
 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral





-- 
Atenciosamente,
Fábio Telles Rodriguez
blog: http://www.midstorm.org/~telles/
e-mail / gtalk / MSN: fabio.tel...@gmail.com
Skype: fabio_telles

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