În prezent, mă întrebam dacă cineva ar putea face lumină asupra problemei pe care o am.
În prezent, încerc să folosesc acest tutorial pentru a găsi procese blocate și blocaje
https://www.brentozar.com/archive/2014/03/extended-events-doesnt-hard/#comment-3481472
Am parcurs pașii așa cum se spune în tutorial, așa că nu sunt sigur ce am greșit.
După colectarea evenimentelor, rulez această interogare:
WITH events_cte AS (
SELECTAȚI
xevents.event_data,
DATEADD(mi,
DATEDIFF(mi, GETUTCDATE(), CURRENT_TIMESTAMP),
xevents.event_data.value(
„(event/@timestamp)[1]”, „datetime2”)) AS [ora evenimentului] ,
xevents.event_data.value(
„(eveniment/acțiune[@name="client_app_name"]/value)[1]', 'nvarchar(128)')
AS [numele aplicației client],
xevents.event_data.value(
„(eveniment/acțiune[@name="client_hostname"]/value)[1]', 'nvarchar(max)')
AS [nume gazdă client],
xevents.event_data.value(
„(eveniment[@name="blocked_process_report"]/data[@name="database_name"]/value)[1]', 'nvarchar(max)')
AS [numele bazei de date],
xevents.event_data.value(
„(eveniment[@name="blocked_process_report"]/data[@name="database_id"]/value)[1]”, „int”)
AS [database_id],
xevents.event_data.value(
„(eveniment[@name="blocked_process_report"]/data[@name="object_id"]/value)[1]”, „int”)
AS [object_id],
xevents.event_data.value(
„(eveniment[@name="blocked_process_report"]/data[@name="index_id"]/value)[1]”, „int”)
AS [index_id],
xevents.event_data.value(
„(eveniment[@name="blocked_process_report"]/data[@name="duration"]/value)[1]”, „bigint”)/1000
AS [durata (ms)],
xevents.event_data.value(
„(eveniment[@name="blocked_process_report"]/data[@name="lock_mode"]/text)[1]”, „varchar”)
AS [lock_mode],
xevents.event_data.value(
„(eveniment[@name="blocked_process_report"]/data[@name="login_sid"]/value)[1]”, „int”)
AS [login_sid],
xevents.event_data.query(
„(eveniment[@name="blocked_process_report"]/data[@name="blocked_process"]/value/blocked-process-report)[1]')
AS blocked_process_report,
xevents.event_data.query(
„(eveniment/date[@name="xml_report"]/value/deadlock)[1]')
AS deadlock_graph
DIN sys.fn_xe_file_target_read_file
(„C:\temp\XEventSessions\blocked_process*.xel”,
„C:\temp\XEventSessions\blocked_process*.xem”,
nul, nul)
CROSS APPLY (SELECTARE CAST(event_data AS XML) AS event_data) ca xevents
)
SELECTAȚI
CAZUL CÂND blocked_process_report.value('(blocked-process-report[@monitorLoop])[1]', 'nvarchar(max)') ESTE NULL
APOI „Deadlock”
ELSE „Proces blocat”
END AS ReportType,
[ora evenimentului],
CAZ [numele aplicației client] WHEN '' THEN ' -- N/A -- '
ELSE [numele aplicației client]
END AS [nume aplicație client],
CAZ [nume gazdă client] WHEN '' THEN ' -- N/A -- '
ELSE [nume gazdă client]
END AS [nume gazdă client],
[numele bazei de date],
COALESCE(OBJECT_SCHEMA_NAME(object_id, database_id), ' -- N/A -- ') AS [schema],
COALESCE(OBJECT_NAME(object_id, database_id), ' -- N/A -- ') AS [tabel],
index_id,
[durata (ms)],
lock_mode,
COALESCE(SUSER_NAME(login_sid), ' -- N/A -- ') AS nume de utilizator,
CAZUL CÂND blocked_process_report.value('(blocked-process-report[@monitorLoop])[1]', 'nvarchar(max)') ESTE NULL
ATUNCI deadlock_graph
ELSE blocked_process_report
Raport END AS
FROM events_cte
ORDER BY [ora evenimentului] DESC ;
Dar primesc acest rezultat:
Mesajul 9415, Nivelul 16, Statul 1, Linia 1
Analiza XML: linia 39, caracterul 109, verificare bine formată: fără „<” în valoarea atributului
Vreo idee?