[firebase-br] Firebird X Insert com loop

Eduardo Jedliczka edujed em gmail.com
Ter Fev 22 18:13:32 -03 2011


Marcelo.

inserir 15 mil linhas numa única transação é um pouco pesado (para
quase todos os bancos de dados)

Pela descrição apresentada por você, tive a sensação que você usa o
SUPERSERVER mas no texto você disse que usa o FB Classic.

talvez você esteja tendo algum problema de lock (com outras
transações) e veja bem, 15 mil registros consomem "alguns pares" de
páginas do banco.

outra alternativa, seria usar savepoints
(http://www.firebirdsql.org/refdocs/langrefupd15-savepoint.html). Crie
um savepoint no início do insert, e commit a cada 500 ou mil
registros.

em caso de falha, dê um rollback total, ou se der tudo certo, faça um
commit definitivo eliminando o savepoint.

o único senão, é que o seu componente de acesso precisa suportar este recurso.


==========================
Eduardo Jedliczka
Apucarana - Pr
==========================




Em 21 de fevereiro de 2011 12:42, Marcelo Moreira
<marcelomoreira.souza em gmail.com> escreveu:
> Pessoal,
>
> Tenho uma aplicação desenvolvida em .NET e trabalhando com o Firebird 2.1.3
> Classic
> Neste aplicativo eu tenho um procedimento onde eu leio o conteudo de um
> arquivo TXT, trato as informações e depois faco um loop para inserir as
> informções no banco. A quantidade de linhas destes arquivos TXT que falei
> varia de 1 ate 15.000
> O problema tem ocorrido quando meu loop é muito grande, tipo um arquivo de
> 15.000 linhas. O sistema ao que parece trava alguma transação e depois
> disso, outras transações que deveriam executar na tabela onde estao sendo
> inseridas as informações ficam travadas tambem e eu so consigo recuperar o
> funcionamento se eu reiniciar o servidor.
>
> Diante destas informaçõe eu tenho algumas duvidas?
>
> 1 - Existe algum tipo de otimizacao/configuracao que eu possa fazer no
> Firebird para ajudar quando eu tiver um loop de insercao de 15.000 linhas?
>
> 2 - Trabalhando com o firebird .net data provider eu estou inserindo as
> informações usando um insert, sera que usar stored procedure faria alguma
> diferença?
>
> 3 - Sera que valeria tambem o esforço de fazer modificaçoes na estrutura da
> tabela onde estao sendo inseridas as informações? Por exemplos tenho campos
> do tipo INTEGER onde guardo valores pequenos como 1 ou 2. Ja pensei em
> trocar para SMALLINT. Ou coisas do tipo.
>
> Se alguem puder dar uma força.
>
> Valew!!
>
> Marcelo Moreira
> (31) 8420-2723
> E-mail / MSN: marcelomoreira.souza em hotmail.com
> E-mail: marcelomoreira.souza em gmail.com
> Skype: marcelomoreira.souza
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>




Mais detalhes sobre a lista de discussão lista