Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Solução de problemas de deadlock no Sql Server 2008


O SQL Server 2008 tem várias maneiras de identificar processos e consultas envolvidos em deadlock.

  1. Se os deadlocks são fáceis de reproduzir, a frequência é maior e você pode criar o perfil do SQL Server (você tem o custo de acesso e desempenho no servidor quando o profiler está habilitado) usando o SQL Profiler lhe dará uma boa visão gráfica do deadlock. Esta página tem todas as informações que você precisa usar gráficos de impassehttp://sqlmag.com/ database-performance-tuning/gathering-deadlock-information-deadlock-graph

  2. Na maioria das vezes, reproduzir deadlocks é difícil, ou eles acontecem no ambiente de produção onde não queremos anexar o Profiler a ele e afetar o desempenho.

Eu usaria esta consulta para obter deadlocks:
SELECT
  xed.value('@timestamp', 'datetime') as Creation_Date,
  xed.query('.') AS Extend_Event
FROM
(
  SELECT CAST([target_data] AS XML) AS Target_Data
  FROM sys.dm_xe_session_targets AS xt
  INNER JOIN sys.dm_xe_sessions AS xs
  ON xs.address = xt.event_session_address
  WHERE xs.name = N'system_health'
  AND xt.target_name = N'ring_buffer'
) AS XML_Data
CROSS APPLY Target_Data.nodes('RingBufferTarget/event[@name="xml_deadlock_report"]') AS XEventData(xed)
ORDER BY Creation_Date DESC

Eu NÃO iria na direção de usar (NOLOCK) para corrigir impasses. Isso é escorregadio e esconde o problema original.