Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Rozwiązywanie problemów z zakleszczeniami w SQL Server 2008

SQL Server 2008 ma wiele sposobów identyfikowania procesów i zapytań związanych z zakleszczeniem.

  1. Jeśli zakleszczenia są łatwe do odtworzenia, częstotliwość jest wyższa i możesz profilować serwer SQL (masz dostęp i koszt wydajności na serwerze, gdy profiler jest włączony) przy użyciu programu SQL Profiler da ci ładny graficzny widok zakleszczenia. Ta strona zawiera wszystkie informacje, które trzeba użyć wykresów zakleszczeńhttp://sqlmag.com/ database-performance-tuning/gathering-deadlock-information-deadlock-graph

  2. W większości przypadków odtworzenie zakleszczeń jest trudne lub zdarzają się w środowisku produkcyjnym, w którym nie chcemy dołączać do niego Profilera i wpływać na wydajność.

Użyję tego zapytania, aby uzyskać zakleszczenie:

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

NIE poszedłbym w kierunku używania (NOLOCK) do naprawiania zakleszczeń. To jest śliskie zbocze i ukrywanie pierwotnego problemu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wartościowy parametr tabeli:wysyłanie danych w małych porcjach

  2. Użyj OBJECTPROPERTY(), aby określić, czy obiekt jest widokiem w SQL Server

  3. Połącz kolumnę varchar z kolumną int

  4. iteracja przez wiersze datagrid

  5. Wykluczyć kolumnę za pomocą SELECT * [oprócz kolumny A] FROM tabela A?