Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais
Resposta : Desafio de SQL Server
Data:1/31/2013

Translate this page now :





Categories: SQLServer

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :
Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon

Veja Também


 

sql-server-logoHá algumas semanas propus um desafio de SQL, com um prêmio para quem acertasse a questão. Podem ver a questão original em http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=1357079492327179156 . Infelizmente ninguém acertou.

Então é chegado o momento da verdade : A Resposta !!

A explicação do problema começa no fato de estarmos utilizando transações distribuidas no framework .NET (transactionScope). Essas transações, devido a uma visão muito conversavadora, elas assumem por default um transaction isolation level como serializable.

Isso ocorre por uma suposição de que o desenvolvedor não saiba o que são exatamente os transaction isolation levels, então assume-se a opção mais segura para o funcionamento – e mais prejudicial para a performance.

Essa característica pode ser uma novidade para muitos, mais ainda não explica claramente a situação – por que um único procedimento, ao ser executado por duas pessoas, estava gerando deadlock ?

O procedimento em si era composto por um select e um update, ambos na mesma tabela.

A impressão geral seria : quando uma execução pegar um lock, as demais param no mesmo ponto, então nunca daria deadlock, certo ? Errado.

Assim como todos os isolation levels, o serializable muda o comportamento dos locks sobre os selects. O que ele faz ? É como se ele aplicasse um holdLock no select. Por padrão um select causa lock shared, com o uso de holdlock o lock shared será mantido até o fim da transação.

Ora, locks shared são compatíveis com locks shared, então várias execuções podem pegar lock shared ao mesmo tempo sobre os mesmos objetos.

Assim, voltando ao procedimento : As duas execuções simultâneas passariam pelo select sem problema algum, ambas pegariam lock shared na tabela. Porém, ao chegar no update, ficariam esperando que a outra execução liberasse o lock shared para que o update pudesse prosseguir. Temos então duas execuções, uma esperando pela outra. Resultado : Deadlock!!



Categories: SQLServer


Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
data: 5/12/2018 9:54:00 PM
nome: KELkXcbQoAcpwQbnZqP
email: support@genericpharmacydrug.com
comentário:
I01Mkr https://www.genericpharmacydrug.com

data: 2/17/2018 1:47:00 PM
nome: TzzzFaKDedVML
email: jimosa4xf2@hotmail.com
comentário:
mE1IYL http://www.LnAJ7K8QSpfMO2wQ8gO.com

data: 10/15/2016 9:01:00 AM
nome: fbpRDZeDfPYOsLUWF
email: jogcbfn@hotmail.com
comentário:
mXt49N http://www.FyLitCl7Pf7kjQdDUOLQOuaxTXbj5iNG.com

data: 8/25/2015 10:53:00 AM
nome: XLjiiKEKExUYxy
email: arlieh13@usa.net
comentário:
One moment, please http://www.dcr.ie//about-us/ minutes newspaper cipla tadacip reviews hysteria LONDON, Oct 17 (Reuters) - Britain's top share index endedhigher on Thursday, helped by a surge in media group BSkyB, although investors were underwhelmed by a temporary fixto the United States' debt issues.

data: 8/25/2015 10:53:00 AM
nome: TermOZzdyGGGwIvBT
email: micahjba@yahoo.com
comentário:
I'm doing an internship http://michigansportscenter.com/about rarely hydrochlorothiazide 50 mg historic "I don't see us necessarily scaling our relationship with some of our alternative platforms back in any way, even once it gets resolved," said Mr. Unkel. "We've been basically learning and using their platforms in parallel to this situation for quite some time, and there are some things about those platforms that we actually enjoy, like and leverage more than we find in, say, DoubleClick Bid Manager."

 1  
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br