[firebase-br] RES: Lockwait como usar

Gladiston Santana gladiston em vidy.com.br
Sex Set 14 11:44:10 -03 2018


se lockwait=false a pessoa tomará deadlock de cara quando acessa uma
informação - registro ou página - que está em transação, util para evitar o
acesso a algo que sofrerá modificações em instantes, por exemplo, a
disponibilidade da poltrona para venda de um ticket.
se lockwait=true, fará a mesma coisa, mas o sistema aguardará o desfecho de
commit ou rollback de quem estiver causando o lock se demorar muito, a
transação falhará por  timeout. Sistemas assim, precisam ser ajustados para
que transações sejam iniciadas e terminadas num prazo rasoável, caso
contrário, o sujeito sai para tomar cafezinho ou ir ao banheiro e o sistema
ficará aguardando um tempo desnecessário, incombinável se for venda pela
internet.
se você atualiza seu estoque por meio de triggers, entenda que quando for
fazer manutenção -  dependendo do isolamento que escolheu - será você o
causador do lock.
em sistemas de estoque, o saldo atual, se possível deve ser numa tabela
diferente do cadastral e o saldo  um resultado aritimético que evite
updates.
A operação de update/insert/delete é sempre a mais onerosa para banco de
dados. O que você vê como update, outros bancos veem como um delete seguido
de outro insert, daí nascem operações de logica como o estorno que alteram
resultados sem precisar de updates.


Em 12 de setembro de 2018 11:16, rodrigo <firebase em dominioinf.com.br>
escreveu:

> Bom dia Gladiston, Obrigado pela resposta,
>
> Entao, o meu problema basicamente é nos pedidos, é onde recebo mais
> mensagens de deadlock.
>
> O cenário envolve a venda de produtos onde n vendedores podem vender o
> mesmo produto para cada pedido.
> Nos pedidos, o meu sistema não permite abrir o mesmo pedido em dois
> terminais diferente.
>
> Então vejo que o problema pode ser no inserir itens, quando o sistema
> atualiza
> O estoque na tabela produtos.
>
> Embora eu abra e feche a inserção em questão de segundos, pois procuro não
> deixar a transação aberta.
>
> Try
>
> // insere dados dos itens
>
> // atualizo a tabela estoque com uma informação importante para o sistema
>
> Ibotransaction1.commit;
>
> // aqui faço uma recontagem pela movimentação do estoque e atualizo a
> tabela estoque através de uma procedure
> Que já faz um commit dentro da própria procedure
>
> Except
> ibotransaction1.rollback;
> End;
>
> Entao acredito que o deadlock esteja ocorrendo no momento em que atualiza
> o estoque, pq
> Vao atualizar a mesma tabela ao mesmo tempo.
>
> No ibotransaction estou usando Isolation Committed (Read Committed)
> Autocommit = false
> Server autocommit = false
> Readonly = false
> Lockwait = false  (estou fazendo testes com essa opção como true, porém
> também retornou deadlock)
>
> Nesse caso, eu não gostaria que o sistema aprensentasse mensagens de erro,
> imagina o cliente fechando um pedido
> Com o vendedor, e o sistema começasse a travar emitindo erros de
> deadlock...
>
> Gostaria de saber sua opnião, de como posso melhorar isso.
>
> Grato
>
>
>
>
>
>
> Enviado do Email para Windows 10
>
> De: Gladiston Santana
> Enviado:quarta-feira, 12 de setembro de 2018 10:59
> Para: FireBase
> Assunto: Re: [firebase-br] Lockwait como usar
>
> Olá colega.
> Complementando ao que o Carlos disse, você precisa entender como você quer
> que seu programa funcione e então acionar o modelo de transação mais
> adequado.
> Por exemplo, se eu estou vendendo passagens de ônibus e abro um cumpom de
> venda e tô preenchendo uma venda da poltrona 7, seria inconcebivel outro
> vendedor que é mais rapido na digitação, selecionar a poltrona 7 e vende-la
> primeiro que eu. Nesse cenário seria preferivel que o segundo vendedor no
> simples gesto de tentar vendar a poltrona 7 tomasse um belo de um dead lock
> antes de abrir o formulário de venda. Mas um cenário diferente como o de
> atualização cadastral, isso não seria importante, quem preenchesse por
> ultimo é o que ficaria valendo. Esses tipos de cenários são chamados de
> "tipo de isolamento" e está presente no componente de transação.
> Você tem um componente de transação para colocar no seu formulario, e
> formulários diferentes podem ter cenários ou tipo de isolamento diferentes,
> mas se um programa por inteiro usará o mesmo cenário, você pode suprimir
> este tipo de componente e assinalar o tipo de isolamento/transação direto
> no componente de conexão.
> Depois de entender o uso desse tipo de componente, você não terá mais
> problemas, quero dizer, você não verá um deadlock como um problema, mas um
> requisito necessário para usar aquela parte do programa.
> Um problema de iniciantes com o IBO é que ele tem ajustes automaticos
> transacionais, você não informa o tipo de isolamento e tantos outros
> parametros e a inteligência do Jason assumirá uma série de coisas para
> você, mas não é bom que os isolamentos sejam determinados por terceiros,
> você deve defini-los.
>
> G.
>
> Em 12 de setembro de 2018 09:12, rodrigo <firebase em dominioinf.com.br>
> escreveu:
>
> > Bom dia,
> >
> > Estou com vários problemas de deadlock em meus sistemas, e estou tentando
> > fazer algo para diminuir esse problema.
> >
> > Já segui uma dica para colocar um transaction para ler e um para gravar,
> > mas o problema aumentou mais ainda.
> >
> > Entao estou ativando o modo LockWait para true e lockwaittimeout para
> 5000.
> >
> > Essas configurações estão corretas? Será que isso vai me ajudar ou poderá
> > me ocasionar mais problemas?
> >
> > Utilizo IBO e os componentes da palheta IBODataset
> >
> > Grato pelas opiniões.
> >
> >
> >
> >
> ______________________________________________
> 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://www.firebase.com.br/
> pesquisa_lista.html
>
>
>
> ---
> Este email foi escaneado pelo Avast antivírus.
> https://www.avast.com/antivirus
> ______________________________________________
> 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://www.firebase.com.br/
> pesquisa_lista.html
>



-- 
A Vidy possui um Sistema de Gestão da Qualidade estruturado e com
Certificação ISO 9001 há mais de 10 anos, mantendo seu foco na Qualidade e
na Melhoria Continua.

Em março de2018 migramos com sucesso para a nova versão da ISO 9001.

Somos a única Empresa Brasileira de Engenharia de Laboratórios com
certificação com o Escopo Completo; desde Projetos, Engenharia, Construção,
Fabricação e Instalação de Laboratórios.



Mais detalhes sobre a lista de discussão lista