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

Responder a