Re: [pgbr-geral] Commit a cada Insert ou N registros?
-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?
-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?
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?
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?
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?
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?
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