• Sign in
 

LATAM Team blog

Search Blogs
Tags
  • Cloud
  • Cluster
  • Crash
  • Desarrollo
  • Desenvolvimento
  • Directory Services
  • DST
  • Español
  • Exchange/Outlook
  • Hang
  • High Availability
  • IIS
  • Networking
  • Office
  • People
  • Performance
  • Português
  • PowerShell Scripts
  • Security
  • Setup
  • Sharepoint
  • SQL
  • Virtualization
  • Windbg Scripts
  • Windows
Blog - News

Where Are You Coming From Today?

Where are you now?

Follow us on:

Options
  • Blog Home
  • About
  • Share this
  • RSS for posts
  • Atom
  • RSS for comments
Archive
Archives
  • May 2013 (4)
  • April 2013 (5)
  • March 2013 (6)
  • February 2013 (3)
  • January 2013 (3)
  • December 2012 (2)
  • November 2012 (1)
  • October 2012 (4)
  • September 2012 (5)
  • August 2012 (2)
  • July 2012 (2)
  • June 2012 (3)
  • May 2012 (13)
  • April 2012 (6)
  • March 2012 (6)
  • February 2012 (4)
  • January 2012 (7)
  • December 2011 (11)
  • October 2011 (6)
  • September 2011 (1)
  • August 2011 (3)
  • July 2011 (7)
  • June 2011 (6)
  • May 2011 (5)
  • April 2011 (2)
  • March 2011 (13)
  • February 2011 (1)
  • January 2011 (5)
  • December 2010 (6)
  • November 2010 (1)
  • October 2010 (6)
  • September 2010 (2)
  • August 2010 (3)
  • July 2010 (3)
  • June 2010 (5)
  • May 2010 (1)
  • April 2010 (10)
  • March 2010 (21)
  • February 2010 (8)
  • January 2010 (3)
  • December 2009 (5)
  • November 2009 (5)
  • October 2009 (6)
  • September 2009 (8)
  • August 2009 (9)
  • July 2009 (1)
  • June 2009 (3)
  • May 2009 (2)
  • April 2009 (7)
  • March 2009 (4)
  • February 2009 (7)
  • January 2009 (7)
  • December 2008 (8)
  • November 2008 (7)
  • October 2008 (22)
  • September 2008 (17)
  • August 2008 (13)
  • July 2008 (11)
  • June 2008 (7)
  • May 2008 (3)
  • April 2008 (2)
  • March 2008 (6)
  • January 2008 (4)
  • December 2007 (9)
  • November 2007 (4)
  • October 2007 (3)
  • September 2007 (8)
  • August 2007 (4)
  • July 2007 (2)
  • June 2007 (5)
  • May 2007 (7)
  • April 2007 (9)
  • March 2007 (7)
  • February 2007 (6)
  • January 2007 (4)
  • December 2006 (14)
  • November 2006 (10)
  • October 2006 (10)
  • September 2006 (11)
  • August 2006 (15)
  • July 2006 (7)
  • June 2006 (14)
  • May 2006 (22)
  • April 2006 (16)
  • March 2006 (20)
  • January 2006 (1)

Deadlocks no SQL Server 2008, o que fazer para resolvê-los?

TechNet Blogs > LATAM Team blog > Deadlocks no SQL Server 2008, o que fazer para resolvê-los?

Deadlocks no SQL Server 2008, o que fazer para resolvê-los?

Rate This
LatamBlog
18 Mar 2010 6:07 PM
  • Comments 1

por Roberto Cavalcanti

Existe uma percepção equivocada de que os deadlocks que ocorrem no SQL Server são um “problema” causado pelo SQL Server Engine . Na verdade esse é um recurso do produto. Existe um mecanismo que encontra e “mata” uma das tarefas (tasks) que estão em deadlock. Ele se chama SQL Server Database Engine deadlock monitor e é um recurso que evita problemas de concorrência entre as transações gerenciadas pelo SQL Server. Após o deadlock monitor matar uma das tasks e gerar um erro, ocorre o rollback da transação que é considerada a vítima (“deadlock victm”). Esse procedimento permite que o desempenho da sua aplicação não seja tão afetado por uma falta de tratamento de erros em seu código. 

O controle de concorrência é um recurso fundamental para o bom funcionamento de um Sistema de Gerenciamento de Bancos de Dados Relacionais (SGBD). Graças ao deadlock monitor a task (ou SPID) vencedora pode continuar a execução das suas transações sem que seja necessário reiniciar o servidor.

Para detectar dentro do seu código o momento em que um deadlock está ocorrendo, capture o evento de erro 1205 que é retornado pelo SQL Server e trate-o de acordo com as regras de negócios pertinentes à sua aplicação.

Segue um script de exemplo de como tratar deadlocks em T-SQL:

TentaNovamente:
SET @NumTentativas += 1 -- incrementa o contador

BEGIN TRY
BEGIN TRANSACTION
UPDATE Production.Product SET ListPrice = 09.99 WHERE ProductID = 1
UPDATE Production.Product SET ListPrice = 04.99 WHERE ProductID = 2
COMMIT TRANSACTION
END TRY

BEGIN CATCH
SET @Err = @@ERROR
IF @Err = 1205 -- um deadlock foi detectado
BEGIN
ROLLBACK TRANSACTION
WAITFOR DELAY '00:00:05'
PRINT 'Aconteceu um deadlock!, tentativa ' + CAST(@NumTentativas AS CHAR(1)) -- insira aqui o que você quer fazer para avisar ao usuario sobre a nova tentativa, etc.
IF @NumTentativas < @MaxPermitido -- testa quantas vezes tentaremos de novo
GOTO TentaNovamente; -- tenta executar o update novamente
END
END CATCH

Para detalhes mais específicos de como detectar e solucionar os deadlocks, veja esses artigos do Books Online – Deadlocking, Minimizing Deadlocks, Handling Deadlocks, Detecting and Ending Deadlocks

O SQL Server oferece todo o controle para que você evite problemas de concorrência. Cabe agora a você tirar proveito desses recursos!

 

  • 1 Comments
Português, Performance, SQL
Comments
Comments
  • liliana pereira
    30 Mar 2010 4:37 AM

    Ola, achei o código fantastico e muito util so que eu estou a usar o sql server 2000, por que tem mesmo que ser, e algum codigo da erro, se calhar nao é compactivel!

    Podes ajudar me?

Page 1 of 1 (1 items)
  • © 2013 Microsoft Corporation.
  • Terms of Use
  • Trademarks
  • Privacy & Cookies
  • 5.6.426.415
  • TechNet
  • Products
  • IT Resources
  • Downloads
  • Training
  • Support
Products
  • Windows
  • Windows
    Server
  • System
    Center
  • Internet
    Explorer
 
  • Office
  • Office 365
  • Exchange
    Server
 
  • SQL Server
  • SharePoint
    Products
  • Lync
  • See all products »
Resources
  • Evaluation Center
  • Learning Resources
  • Microsoft IT Camps
  • Microsoft Technical Communities
  • Microsoft Virtual Academy
  • Script Center
  • Server and Tools Blogs
  • Solution Accelerators
  • TechNet Blogs
 
  • TechNet Flash Newsletter
  • TechNet Gallery
  • TechNet Library
  • TechNet Magazine
  • TechNet Subscriptions
  • TechNet Video
  • TechNet Wiki
  • Windows Sysinternals
  • Virtual Labs
Solutions
  • Networking
  • Cloud and Datacenter
  • Security
  • Virtualization
Updates
  • Service Packs
  • Security Bulletins
  • Microsoft Update
Trials
  • Windows Server 2012
  • System Center 2012 SP1
  • Microsoft SQL Server 2012 SP1
  • Windows 8 Enterprise
  • See all trials »
Related Sites
  • Microsoft Download Center
  • TechNet Evaluation Center
  • Drivers
  • Compatability & Converters
  • Windows Sysinternals
  • TechNet Gallery
Training
  • Training Catalog
  • Class Locator
  • Microsoft Virtual Academy
  • Free Windows Server 2012 courses
  • Free Windows 8 courses
  • SQL Server training
  • e-Learning overview
Certifications
  • Certification overview
  • MCSA: Windows 8
  • Windows Server Certification (MCSE)
  • Private Cloud Certification (MCSE)
  • SQL Server Certification (MCSE)
Other resources
  • TechNet Events
  • Second shot for certification
  • Born To Learn blog
  • IT Camps
Support by product
  • Exchange Server
  • Forefront Server
  • Forefront Edge Security
  • Forefront Server Security
  • Internet Explorer
  • Office
  • SharePoint
 
  • SQL Server
  • System Center
  • Windows Server
  • Windows XP
  • Windows Vista
  • Windows 7
  • Windows 8
Other support links
  • Microsoft Premier Online
  • Microsoft Fix It Center
  • TechNet Forums
  • MSDN Forums
  • Security Bulletins & Advisories
  • International support solutions
  • Log a support ticket
  • Look up event IDs and error codes
Not an IT pro?
  • Microsoft Customer Support
  • Microsoft Community Forums