sql >> Databasteknik >  >> RDS >> Sqlserver

Deadlock felsökning i SQL Server 2008

SQL Server 2008 har flera sätt att identifiera processer och frågor som är involverade i dödläge.

  1. Om låsningar är lätta att reproducera, är frekvensen högre och du kan profilera SQL-servern (du har åtkomst- och prestandakostnaden på servern när profiler är aktiverad) med hjälp av SQL Profiler kommer du att ge dig en snygg grafisk bild av dödläge. Den här sidan har all information du måste använda dödlägesdiagramhttp://sqlmag.com/ database-performance-tuning/gathering-deadlock-information-deadlock-graph

  2. Oftast är det svårt att återskapa dödlägen, eller så händer de i produktionsmiljöer där vi inte vill koppla Profiler till den och påverka prestandan.

Jag skulle använda den här frågan för att få dödlägen:

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

Jag skulle INTE gå i riktning mot att använda (NOLOCK) för att fixa dödläge. Det är en hal backe och döljer det ursprungliga problemet.



  1. Hur man hittar dubbletter av poster i Access

  2. Är det säkert att ändra ordning på kolumner i schema.rb för Rails 4/Postgres?

  3. Hur kopplar man HTML-sidor till mysql-databasen?

  4. Oracle - Välj var fältet har gemener