sql >> Base de Datos >  >> RDS >> Sqlserver

Solución de problemas de interbloqueo en Sql Server 2008

SQL Server 2008 tiene varias formas de identificar los procesos y las consultas involucradas en interbloqueos.

  1. Si los interbloqueos son fáciles de reproducir, la frecuencia es más alta y puede perfilar el servidor SQL (tiene el costo de acceso y rendimiento en el servidor cuando el generador de perfiles está habilitado) usando SQL Profiler le dará una buena vista gráfica del interbloqueo. Esta página tiene toda la información que necesita. necesita usar gráficos de interbloqueo base de datos-rendimiento-tuning/recopilación-deadlock-information-deadlock-graph

  2. La mayoría de las veces, la reproducción de interbloqueos es difícil, o ocurren en un entorno de producción en el que no queremos adjuntar Profiler y afectar el rendimiento.

Usaría esta consulta para que ocurrieran interbloqueos:

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

NO iría en la dirección de usar (NOLOCK) para arreglar interbloqueos. Eso es una pendiente resbaladiza y esconde el problema original.