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" <[email protected]>
To: "Fábio Gibon - Comex System" <[email protected]>; "Comunidade
PostgreSQL Brasileira" <[email protected]>
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
<[email protected]> 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
> [email protected]
> 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: [email protected]
Skype: fabio_telles
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral