Re: [pgbr-geral] Commit a cada Insert ou N registros?

2016-08-26 Por tôpico sistemas



-Mensagem Original- 
From: Euler Taveira

Sent: Friday, August 26, 2016 1:34 PM
To: Comunidade PostgreSQL Brasileira
Subject: Re: [pgbr-geral] Commit a cada Insert ou N registros?

On 26-08-2016 10:29, siste...@mvsoftware.com.br wrote:

Pessoal estou fazendo uma rotina (com loop) que exige update numa lista
de registros, estou na dúvida se é melhor dar Commit a cada Insert ou a
cada X registros, qual a carga que o Postgres aguenta sem dar Commit a
cada registro?


Uma transação *não* pode conter mais do que 2³²-2 comandos SQL.


--
  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


Opa acho que era isso que eu precisava saber, existe um limite e não é 
somente a memória do servidor!


Obrigado Euler


Marcelo 


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

Re: [pgbr-geral] Commit a cada Insert ou N registros?

2016-08-26 Por tôpico sistemas



-Mensagem Original- 
From: Osvaldo Kussama

Sent: Friday, August 26, 2016 11:42 AM
To: Comunidade PostgreSQL Brasileira
Subject: Re: [pgbr-geral] Commit a cada Insert ou N registros?

Em 26/08/16, siste...@mvsoftware.com.br<siste...@mvsoftware.com.br> 
escreveu:

From: Douglas Fabiano Specht
Sent: Friday, August 26, 2016 11:16 AM
To: Comunidade PostgreSQL Brasileira
Subject: Re: [pgbr-geral] Commit a cada Insert ou N registros?


Obrigado pela resposta Douglas, eu fiz uns testes aqui e relamente commit 
em

bloco é mais rápido, minha duvida é com relação a quantidade de registros
que posso manter em cache antes do commit, eu gostaria que, se a transação
desse algum erro ele não alterasse nada, pois se der um erro vou pedir ao
usuario para executar a rotina novamente após a correção, mas vou ter que
estudar melhor isso, pois creio que haja um limite nesse bloco, nada que
umas validações a mais não resolva.




Note que se você fizer COMMIT a cada n registros e der algum problema
muito provavelmente você já terá permanentemente em sua base os
registros já commitados.
Não será possível simplesmente reexecutar a rotina. A rotina tem que
saber a partir de que ponto ela deve continuar o processamento.
Uma possível solução é você imprimir a cada COMMIT a quantidade de
registros já processados e, em caso de reprocessamento, informar ao
programa quantos registros ele deve saltar.

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


Sim, o detalhe é mais performance e o quanto posso manter em cache antes de 
comitar, eu já mantenho um campo status mostrando que aquele registro foi 
anterado, como hoje faço registro a registro esse campo status me ajuda no 
reprocesso, o que estou estudando é comitar todo o processo de uma vez ou a 
cada N registros, eu prefero ao final do processo porque se der um erro 
posso dizer ao usuario que nada mudou, mas se não der vou ter que fazer um 
controle do que foi alterado elo campo status e numero de processo.



Marcelo 


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

Re: [pgbr-geral] Commit a cada Insert ou N registros?

2016-08-26 Por tôpico Euler Taveira
On 26-08-2016 10:29, siste...@mvsoftware.com.br wrote:
> Pessoal estou fazendo uma rotina (com loop) que exige update numa lista
> de registros, estou na dúvida se é melhor dar Commit a cada Insert ou a
> cada X registros, qual a carga que o Postgres aguenta sem dar Commit a
> cada registro?
> 
Uma transação *não* pode conter mais do que 2³²-2 comandos SQL.


-- 
   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] Commit a cada Insert ou N registros?

2016-08-26 Por tôpico Osvaldo Kussama
Em 26/08/16, siste...@mvsoftware.com.br<siste...@mvsoftware.com.br> escreveu:
> From: Douglas Fabiano Specht
> Sent: Friday, August 26, 2016 11:16 AM
> To: Comunidade PostgreSQL Brasileira
> Subject: Re: [pgbr-geral] Commit a cada Insert ou N registros?
>
>
> Obrigado pela resposta Douglas, eu fiz uns testes aqui e relamente commit em
> bloco é mais rápido, minha duvida é com relação a quantidade de registros
> que posso manter em cache antes do commit, eu gostaria que, se a transação
> desse algum erro ele não alterasse nada, pois se der um erro vou pedir ao
> usuario para executar a rotina novamente após a correção, mas vou ter que
> estudar melhor isso, pois creio que haja um limite nesse bloco, nada que
> umas validações a mais não resolva.
>


Note que se você fizer COMMIT a cada n registros e der algum problema
muito provavelmente você já terá permanentemente em sua base os
registros já commitados.
Não será possível simplesmente reexecutar a rotina. A rotina tem que
saber a partir de que ponto ela deve continuar o processamento.
Uma possível solução é você imprimir a cada COMMIT a quantidade de
registros já processados e, em caso de reprocessamento, informar ao
programa quantos registros ele deve saltar.

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

Re: [pgbr-geral] Commit a cada Insert ou N registros?

2016-08-26 Por tôpico sistemas
From: Douglas Fabiano Specht 
Sent: Friday, August 26, 2016 11:16 AM
To: Comunidade PostgreSQL Brasileira 
Subject: Re: [pgbr-geral] Commit a cada Insert ou N registros?



Em 26 de agosto de 2016 10:29, <siste...@mvsoftware.com.br> escreveu:


  Pessoal estou fazendo uma rotina (com loop) que exige update numa lista de 
registros, estou na dúvida se é melhor dar Commit a cada Insert ou a cada X 
registros, qual a carga que o Postgres aguenta sem dar Commit a cada registro?

  Por exemplo, tenho um loop que atualiza 2mil registros (que irá aumentar a 
cada dia), dou o Commit a cada X registros ou só no final?
  Eu gostaria de "Comitar" no final, caso alguma coisa de errado, não bagunço a 
base, mas minha preocupação é a memoria que isso pode usar, se é que ele usa a 
memoria e não uma tabela temporária no disco.



  Marcelo

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

bom dia Marcelo,
nos aqui na empresa tínhamos um problema de performance qdo efetuávamos uma 
grande quantidade de insert e efetuando commit registro a registro.
Atualmente mudamos para 5000 registros e melhorou muito.
mas por que 5000? como utilizamos multi-banco, acho que foi imposição do sql 
server 2008(se nao me engano) de só aceitar essa quantidade.

pense no seguinte:

insert into table values (1,1),(1,2),(1,3),(2,1);


e não
insert into table values (1,1);

insert into table values (1,2);

insert into table values (1,3);

insert into table values (2,1);


claro que você pode efetuar um teste de mesa bem simples e tirar as suas 
conclusões no seu ambiente.


-- 


Douglas Fabiano Specht

Obrigado pela resposta Douglas, eu fiz uns testes aqui e relamente commit em 
bloco é mais rápido, minha duvida é com relação a quantidade de registros que 
posso manter em cache antes do commit, eu gostaria que, se a transação desse 
algum erro ele não alterasse nada, pois se der um erro vou pedir ao usuario 
para executar a rotina novamente após a correção, mas vou ter que estudar 
melhor isso, pois creio que haja um limite nesse bloco, nada que umas 
validações a mais não resolva.


Marcelo



___
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] Commit a cada Insert ou N registros?

2016-08-26 Por tôpico Douglas Fabiano Specht
Em 26 de agosto de 2016 10:29,  escreveu:

>
> Pessoal estou fazendo uma rotina (com loop) que exige update numa lista de
> registros, estou na dúvida se é melhor dar Commit a cada Insert ou a cada X
> registros, qual a carga que o Postgres aguenta sem dar Commit a cada
> registro?
>
> Por exemplo, tenho um loop que atualiza 2mil registros (que irá aumentar a
> cada dia), dou o Commit a cada X registros ou só no final?
> Eu gostaria de "Comitar" no final, caso alguma coisa de errado, não
> bagunço a base, mas minha preocupação é a memoria que isso pode usar, se é
> que ele usa a memoria e não uma tabela temporária no disco.
>
>
>
> Marcelo
>
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


bom dia Marcelo,
nos aqui na empresa tínhamos um problema de performance qdo efetuávamos uma
grande quantidade de insert e efetuando commit registro a registro.
Atualmente mudamos para 5000 registros e melhorou muito.
mas por que 5000? como utilizamos multi-banco, acho que foi imposição do
sql server 2008(se nao me engano) de só aceitar essa quantidade.

pense no seguinte:

insert into table values (1,1),(1,2),(1,3),(2,1);

e não
insert into table values (1,1);
insert into table values (1,2);
insert into table values (1,3);
insert into table values (2,1);

claro que você pode efetuar um teste de mesa bem simples e tirar as suas
conclusões no seu ambiente.


-- 

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

[pgbr-geral] Commit a cada Insert ou N registros?

2016-08-26 Por tôpico sistemas


Pessoal estou fazendo uma rotina (com loop) que exige update numa lista de 
registros, estou na dúvida se é melhor dar Commit a cada Insert ou a cada X 
registros, qual a carga que o Postgres aguenta sem dar Commit a cada 
registro?


Por exemplo, tenho um loop que atualiza 2mil registros (que irá aumentar a 
cada dia), dou o Commit a cada X registros ou só no final?
Eu gostaria de "Comitar" no final, caso alguma coisa de errado, não bagunço 
a base, mas minha preocupação é a memoria que isso pode usar, se é que ele 
usa a memoria e não uma tabela temporária no disco.




Marcelo

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