Re: [pgbr-geral] consumo de memória

2014-12-02 Por tôpico Euler Taveira
On 02-12-2014 17:43, Alessandro Lima wrote:
>>> Misturar aplicação com banco de dados não é uma boa...
> concordo, mas vai convencer o cliente a gastar mais dinheiro!
> 
Não se trata somente de dinheiro. Não analisei o ambiente e isto pode
ser puramente uma possibilidade... A aplicação está lenta porque a
máquina não suporta operar com determinada quantidade de usuários
fazendo tarefas X, Y e Z. Se o recurso computacional é insuficiente, o
cliente precisa aumentar a capacidade ou vai conviver com lentidão e
muita paciência. Jogue as cartas na mesa; a escolha é sempre do cliente. ;)

>>> sugiro que leia sobre como o kernel apresenta esses valores em aplicações
> como top
> cada processo estava com valores distindtos, ou seja, não representavam o
> mesmo processo pai.
> 
Cadê a saída? Você ao menos leu a referência?

Eu novamente não entendi a sua colocação. No postgres, toda conexão
possui o mesmo processo pai ('ps faux' que você vai ver o que estou
querendo dizer).


>>> Não entendi a pergunta. Se há memória porque um processo não pode
> utilizá-la?
>>> Sim. Uma simples consulta pode utilizar bem mais do que isso.
> Vou explicar, no meu modesto conhecimento, pensei que o máximo de memória
> ram que o postgres pode usar seria:
> (shared_buffers) + (autovacum_max_workers * maintenance_work_mem) +
> (max_connections + work_mem)
>
Esta conta é inexata. Já vi algumas vezes aqui na lista e nunca tive a
oportunidade de corrigir. Se basear nessa fórmula sem entender como o
seu sistema operacional gerencia memória é o mesmo que colocar uma
chuteira para patinar.

O segundo componente deve ser 'x * mwm' (considerando haver mais objetos
do que max_connections). O terceiro componente na fórmula acima deve ser
'y * wm * n' onde n ⩾ 1 dependendo da complexidade da consulta. Além
disso, você deve considerar 'z * temp_buffers'.

Difícil apresentar algo matematicamente preciso. Vamos para algo mais
aproximado...

Considerando max_connections = a + b,

shared_buffers +
(a + autovacuum_max_workers) * maintenance_work_mem +
b * work_mem * n +
b * temp_buffers

Isso para versão ⩽ 9.3, a versão 9.4 tem autovacuum_work_mem que nos faz
separar o segundo componente. Então:

shared_buffers +
a * maintenance_work_mem +
autovacuum_max_workers * autovacuum_work_mem +
b * work_mem * n +
b * temp_buffers

(A memória dos processos 'background workers' não entram no cálculo).

Nesta fórmula somente o primeiro e o último componente são fixos (mwm,
wm e n podem ser ajustados dinamicamente), ou seja, *não* é possível
fixar a quantidade de RAM total consumida pelo PostgreSQL via
parâmetros. Se mesmo assim, você quiser limitar o efeito do segundo e
terceiro componente ajuste a quantidade de memória por processo no
sistema operacional [1].

> minha intenção era limitar o uso de ram para não usar swap,
> então quando ví um único processo utilizando cerca de 3GB, achei estranho
> dúvida: este tamanho todo de processo poderia ser além dos parâmetros
> citados acima, o cache do s.o.?
> 
Você não leu e/ou não entendeu a referência que apresentei... Desses 3
GB, 1 GB é a memória compartilhada ou outros 2 são utilizados pela sua
consulta.

Para não utilizar swap ou limitar o seu uso, você pode configurar o seu
sistema operacional adequadamente [2].


[1] http://www.postgresql.org/docs/9.4/static/kernel-resources.html#AEN28697
[2]
http://www.postgresql.org/docs/9.4/static/kernel-resources.html#LINUX-MEMORY-OVERCOMMIT


-- 
   Euler Taveira   Timbira - http://www.timbira.com.br/
   PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] consumo de memória

2014-12-02 Por tôpico Alessandro Lima
>>Misturar aplicação com banco de dados não é uma boa...
concordo, mas vai convencer o cliente a gastar mais dinheiro!

>>aplicação precisa *realmente* dos 8 GB?
estamos sempre tentando otimizar a aplicação, mas atualmente a resposta é
sim.

>>sugiro que leia sobre como o kernel apresenta esses valores em aplicações
como top
cada processo estava com valores distindtos, ou seja, não representavam o
mesmo processo pai.

>>Não entendi a pergunta. Se há memória porque um processo não pode
utilizá-la?
>>Sim. Uma simples consulta pode utilizar bem mais do que isso.
Vou explicar, no meu modesto conhecimento, pensei que o máximo de memória
ram que o postgres pode usar seria:
(shared_buffers) + (autovacum_max_workers * maintenance_work_mem) +
(max_connections + work_mem)
minha intenção era limitar o uso de ram para não usar swap,
então quando ví um único processo utilizando cerca de 3GB, achei estranho
dúvida: este tamanho todo de processo poderia ser além dos parâmetros
citados acima, o cache do s.o.?


Atenciosamente,

Alessandro Lima
email grandegoia...@gmail.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] Duvida sobre Replicated Cluster no Postgres 9.3

2014-12-02 Por tôpico Sebastian Webber
2014-12-02 10:02 GMT-02:00 Fabio Eckhardt <
fabioeckha...@universo.univates.br>:

> Sebastian,
>
> Preciso realizar uma Replicação em Cluster usando dois nodo multistate
> (master / slave), mas com Sistema Operacional Ubuntu e não Fedora.
>

Como o Matheus comentou antes, a solução é o HotStandby de sempre.

Em poucas precisaria repedir o processo no link abaixo com S.O Ubuntu (e
> nao Fedora) :
>
> http://clusterlabs.org/wiki/PgSQL_Replicated_Cluster
>
> Sabes se existe alguma documentação na web pra S.O Ubuntu ?
>

Se tem eu não conheço. Mas pelo que vi nesse manual, a unica coisa
especifica do SO é a instalação de pacotes e inicialização de serviços.
Tenho certeza que o Ubuntu (ou derivados do debian) tem um pacote e sintaxe
equivalente. Com um pouco de pesquisa você pode encontrar facilmente e eu
até te ajudo se tu me explicar o que você tem dificuldade.

Um abraço!

-- 
Sebastian Webber
http://swebber.me
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Duvida sobre Replicated Cluster no Postgres 9.3

2014-12-02 Por tôpico Matheus de Oliveira
2014-12-02 10:02 GMT-02:00 Fabio Eckhardt <
fabioeckha...@universo.univates.br>:

> Preciso realizar uma Replicação em Cluster usando dois nodo multistate
> (master / slave), mas com Sistema Operacional Ubuntu e não Fedora.



O que você quer é utilizar replicação nativa (streaming replication)
master/slave do PostgreSQL. Por que você disse antes que isso não te
atendia?

Ah. E as ferramentas do link citado funcionam no Ubuntu. Já usei em Debian,
mas versões um pouco mais antigas que essas, só que creio não ter muita
diferença.

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] Duvida sobre Replicated Cluster no Postgres 9.3

2014-12-02 Por tôpico Fabio Eckhardt
Sebastian,

Preciso realizar uma Replicação em Cluster usando dois nodo multistate
(master / slave), mas com Sistema Operacional Ubuntu e não Fedora.

Em poucas precisaria repedir o processo no link abaixo com S.O Ubuntu (e
nao Fedora) :

http://clusterlabs.org/wiki/PgSQL_Replicated_Cluster

Sabes se existe alguma documentação na web pra S.O Ubuntu ?


Em 1 de dezembro de 2014 13:40, Sebastian Webber 
escreveu:

> 2014-12-01 8:48 GMT-02:00 Fabio Eckhardt <
> fabioeckha...@universo.univates.br>:
>
>> Sebastian,
>>
>> Sou sincero em lhe dizer, não sou muito fã de FEDORA. E atualmente a
>> melhor documentação que existe é pra FEDORA.
>>
>> Sabes algum material na internet para UBUNTU (e postgres 9.3) para
>> realizar uma a Replicação de Cluster com 2 servidores Postgres, isto é " 2
>> nodo multistate cluster". ???
>>
>
> Fábio,
>
> Tu poderias ser mais específico com o que tu precisa fazer? Confesso que
> não entendi o que tu precisas.
>
>
> --
> Sebastian Webber
> http://swebber.me
>



-- 

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


Re: [pgbr-geral] gravar mensagem de erro banco

2014-12-02 Por tôpico Flavio Henrique Araque Gurgel

boa tarde Flavio
obrigado pela resposta. vi um exemplo na internet e queria ver se acha
que é possivel:
neste caso se desse no primeiro ou no segundo insert(timeout por
exemplo) ele daria erro de exception e gravaria esse log?

  if (tg_op = 'insert') then

if (teste = '1' ) then
insert into mensagem(status, result, new.idmensagem, datahoraenvio)
SELECT status, result, new.idmensagem, CURRENT_TIMESTAMP
from http_get('www.terra.com.br  '');
END IF;
if (teste = '2' ) then
insert into mensagem(status, result, new.idmensagem, datahoraenvio)
SELECT status, result, new.idmensagem, CURRENT_TIMESTAMP
from http_get('www.terra.com.br  '');
END IF;
return new;

END IF;

RAISE EXCEPTION '%', mensagem;
insert into mensagem(status, result, idmensagem, datahoraenvio)
values(0, SQLSTATE || SQLERRM || _query, new.idmensagem,
CURRENT_TIMESTAMP);
RETURN NULL;


Isso *não* vai funcionar.
Em caso de excessão, toda a transação sofrerá um ROLLBACK, inclusive seu 
INSERT na tabela "mensagem" que você está tentando.


Suas alternativas são o que eu respondi antes (log para CSV e importação 
desse log ou FDW sobre ele). Uma terceira alternativa seria usar DBLINK 
pro insert que não será transacional e o ROLLBACK não afeta.


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