O SQL Server não está retornando todas as informações do nó quando destruo o XML de impasse do evento 2012 system_health Extended.
Quando executo a seguinte consulta
SELECT CAST(event_data.value('(event/data/value)[1]','varchar(max)') AS XML) AS DeadlockGraph
FROM (
SELECT XEvent.query('.') AS event_data
FROM ( -- Cast the target_data to XML
SELECT CAST(target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets st
INNER JOIN
sys.dm_xe_sessions s
ON s.address = st.event_session_address
WHERE name = 'system_health'
AND target_name = 'ring_buffer'
) AS Data -- Split out the Event Nodes
CROSS APPLY
TargetData.nodes('RingBufferTarget/event[@name="xml_deadlock_report"]') AS XEventData ( XEvent )
) AS tab ( event_data )
em nossa instância do Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34, todas as informações do nó são retornadas junto com as descrições, ou seja,
<deadlock>
<victim-list>
<victimProcess id="process10e26bc8" />
</victim-list>
<process-list>
<inputbuf>
Proc [Database Id = 26 Object Id = 1641213047]
</inputbuf>
</process-list>
...
...
...
</deadlock>
No entanto, quando eu o executo em nossa instância do Microsoft SQL Server 2012 - 11.0.5548.0, todas as informações e descrições do nó são removidas e apenas o texto é retornado, ou seja,
Proc [Database Id = 26 Object Id = 1641213047]
O que pode causar isso? A hierarquia XML completa é gerada em nossa instância de 2012 se eu remover a SELECT CAST(event_data.value('(event/data/value)[1]','varchar(max)')
parte da consulta.
De acordo com http://www.red-gate.com/community/books/accidental-dba [Troubleshooting SQL Server: A Guide for the Accidental DBA] isso parece ser intencional.
Informações adicionais: Alterações de eventos estendidos no SQL Server 2012 – Evento XML para elementos de dados XML
Sua consulta está um pouco diferente do que acabo usando, no entanto, na verdade, analiso um pouco de informação e não apenas devolvo o XML.
As partes específicas de sua consulta que não parecem corretas estão fora de FROM que você tem
AS tab ( event_data )
e, em seguida, você está fazendo referência a isso comoevent_data.value
em seu topSELECT
.Eu mudaria isso para apenas ter
AS tab
e, em seguida, fazer referênciaCROSS APPLY
ao seu arquivoSELECT
. Então seria algo assim: