[firebase-br] Duvida sobre Commit em Rede

Gladiston Santana gladiston em vidy.com.br
Seg Nov 17 09:46:53 -03 2014


Bem, então você identificou um processo onde o commit/insert é lento, isto
é, criação da NFe.

Sobre os indices, digo o seguinte, crie apenas para operações que são
realmente importantes, que sem elas a localização de objetos ficará
comprometida e o sistema lento.
Não crie indices pensando em relatórios ou pesquisas em grids, pelo menos
não sem certificar que o uso de IB_Grids já tenham essa função em RAM.
Se terá de lidar com muitos indices aconselho a aumentar o tamanho de
página para 16k. O consumo de disco e RAM aumentará, mas faz parte do
processo para obter mais velocidade.

No caso de NFe, creio que você tenha um cenário de
produtos/serviços,cliente, etc... numa unica tela, mestre/detalhe, como a
maioria de nós faz.
O adequado neste cenário, na minha opinião - é bom deixar isso claro -, é
usar clientdataset e fazer tudo o que precisa em RAM e não diretamente no
DB.
Voce usa o DB para consultas, mas os dados da NFe que está construindo
residem em CDS.
Tendo a confirmação, então submete a transferencia do que está em CDS para
o banco, daí duas alternativas:
- IB_Script : Voce cria um script com os inserts e no final commit work.
IB_Script é mais rápido que o IBOQuery porque não tem que se preocupar com
os dataawares como TDatasets (TDBEdit e afins) que estejam linkados. Até o
IB_Query é melhor que o IBOQuery por essa mesma razão.
- Procedures : Você apenas dispara uma stored procedure com parametros
adequados e ela faz o resto internamente no banco, o grosso será processado
no lado server, o lado client é apenas um frontend.
Para minhas notas eu uso procedures porque todo o calculo e engenhosidade
tá alí, inclusive o calculo, portanto, o camarada confirma, dispara a SP e
só então obtem os resultados da NF e/ou pedido que se abre em seguida com
os calculos prontos.

Uma observação, CDS é no Delphi7 é meio bugado, dá vazamento de memória
então queira por gentileza criar em memória e destruí-lo e evitar esses
bugs.

Também observe a versão do seu IBO, como disse antes, existem bugs.

Um abraço e boa sorte.




Em 17 de novembro de 2014 08:32, Rodrigo <firebase em dominioinf.com.br>
escreveu:

> Bom dia Gladiston, Obrigado pela resposta,
>
> Sim, ja fiz backup restore.
> Sobre os indices, pode até ser, mas tenho usado conforme tenho aprendido
> aqui mesmo na lista.
> O que vc poderia indicar, excluir todos os indices?
>
> Sobre o insert, eu uso o componente IBODataset e o IBOTransaction e
> IBOQuery para todas as tabelas.
> E os updates, inserts e delete são preenchidos automaticamente pelo
> IBOQuery no UpdateSQL usando
> o botão "Generate for table", mas acredito que não seja por isso. Tenho
> tabelas que contem bastante campos
> como a tabela onde guarda as informações da Nota Fiscal. Pode ser isso?
>
> Sobre a lentidão no servidor não ser mencionada no inicio é porque so
> descobri isso depois do primeiro post,
> as primeira nfes lançadas ficam rapidas e vão ficando lentas a partir da
> segunda, terceira e assim por diante.
>
> Ja fiz varias verificações no meu sistema procurando por objetos criados e
> não destruidos ou Queries muito lentas,
> mas até o momento não consegui achar nada muito fora do normal ou que
> possa ser melhorado.
>
> O que fiz até agora e tem dado um pouco mais resultado é eliminar todos os
> Commits possiveis, e commitar uma
> unica vez quando vou gerar a nfe, então fica lento so na ultima parte,
> depois de lançar o cliente, produtos, formas de pagto, o problema com isso
> é que
> sempre fico com medo de se der uma queda o cliente perder essas
> informações e ter que começa-los do zero novamente.
>
> Grato pela ajuda,



Mais detalhes sobre a lista de discussão lista