Здравствуйте, VladCore, Вы писали:
VC>Единственная полезная инфа в deadlock-ивенте это Duration. Почему же так скудно. Как вытащить больше деталей?
На всякий случай спрошу. Deadlock Graph пробовал?
Re: Как вытащить детали Lock:DeadLock (event = 25) в MS SQL Prof
Здравствуйте, VladCore, Вы писали:
VC>Факт дидлока SQL возвращает. Но в TextData тела sql-кода нет. он есть только в предыдущей строчке трейса
VC>... VC>Единственная полезная инфа в deadlock-ивенте это Duration. Почему же так скудно. Как вытащить больше деталей?
Выше правильно сказали, необходимо использовать событие Deadlock graph. Результат можно сохранить отдельно в виде xml файла, либо в самом Profiler навести мышкой на узел процесса и получить текст запроса. Более трудоемкий вариант, использовать событие Lock:Dealock Chain для определения процессов (SPID), на которых возникла взаимоблокировка, а сам текст запроса выбрать из событий ...Starting и ...Completed с соответствующим SPID.
Re[2]: Как вытащить детали Lock:DeadLock (event = 25) в MS SQL Prof
Здравствуйте, _ABC_, Вы писали:
_AB>Здравствуйте, VladCore, Вы писали:
VC>>Единственная полезная инфа в deadlock-ивенте это Duration. Почему же так скудно. Как вытащить больше деталей? _AB>На всякий случай спрошу. Deadlock Graph пробовал?
Мне и в рантайме надо.
Re[2]: Как вытащить детали Lock:DeadLock (event = 25) в MS SQL Prof
Здравствуйте, Olaf, Вы писали:
O>Выше правильно сказали, необходимо использовать событие Deadlock graph. Результат можно сохранить отдельно в виде xml файла, либо в самом Profiler навести мышкой на узел процесса и получить текст запроса. Более трудоемкий вариант, использовать событие Lock:Dealock Chain для определения процессов (SPID), на которых возникла взаимоблокировка, а сам текст запроса выбрать из событий ...Starting и ...Completed с соответствующим SPID.
Интересная мысль. Найти t-sql по SPID выглядит логично. Но вот только нигде не написано что 25-й ивент логируется после RPCCompleted иди Batch-completed.
Было бы логчнее если бы сначала логировалось deadlock, а потом уже соответсвующий completed.
Re[3]: Как вытащить детали Lock:DeadLock (event = 25) в MS SQL Prof
Здравствуйте, VladCore, Вы писали:
VC>Единственная полезная инфа в deadlock-ивенте это Duration. Почему же так скудно. Как вытащить больше деталей?
А вот это что выдаёт?
SELECT XEvent.query('(event/data/value/deadlock)[1]') AS DeadlockGraph
FROM (
SELECT XEvent.query('.') AS XEvent
FROM (
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 s.NAME = 'system_health'
AND st.target_name = 'ring_buffer'
) AS Data
CROSS APPLY TargetData.nodes('RingBufferTarget/event[@name="xml_deadlock_report"]') AS XEventData(XEvent)
) AS source;
Здравствуйте, VladCore, Вы писали: VC>Интересная мысль. Найти t-sql по SPID выглядит логично. Но вот только нигде не написано что 25-й ивент логируется после RPCCompleted иди Batch-completed. VC>Было бы логчнее если бы сначала логировалось deadlock, а потом уже соответсвующий completed.
Так и есть, если ориентироваться на EventSequence, то события идут в следующем порядке Lock:Deadlock Chain, Deadlock graph, Lock:Deadlock, а потом completed
Картинка
Re[4]: Как вытащить детали Lock:DeadLock (event = 25) в MS S
Здравствуйте, Olaf, Вы писали:
VC>>Интересная мысль. Найти t-sql по SPID выглядит логично. Но вот только нигде не написано что 25-й ивент логируется после RPCCompleted иди Batch-completed. VC>>Было бы логчнее если бы сначала логировалось deadlock, а потом уже соответсвующий completed.
O>Так и есть, если ориентироваться на EventSequence, то события идут в следующем порядке Lock:Deadlock Chain, Deadlock graph, Lock:Deadlock, а потом completed
О том и речь! Сначала идет completed (12) а потом дидлок (25)
Кстати, а что значит 0x07010100000000000000000001000B в BinaryData?
Здравствуйте, VladCore, Вы писали:
VC>Здравствуйте, Olaf, Вы писали:
VC>>>Интересная мысль. Найти t-sql по SPID выглядит логично. Но вот только нигде не написано что 25-й ивент логируется после RPCCompleted иди Batch-completed. VC>>>Было бы логчнее если бы сначала логировалось deadlock, а потом уже соответсвующий completed.
O>>Так и есть, если ориентироваться на EventSequence, то события идут в следующем порядке Lock:Deadlock Chain, Deadlock graph, Lock:Deadlock, а потом completed
VC>О том и речь! Сначала идет completed (12) а потом дидлок (25)
Я не увидел у вас сортировки по EventSequence при обращении к fn_trace_gettable, отсортируйте и все встанет на свои места.
VC>Кстати, а что значит 0x07010100000000000000000001000B в BinaryData?
Вроде как идентификатор ресурса блокировки Lock:Deadlock, но по факту что-то непонятное select cast(0x07010100000000000000000001000B as nvarchar(max)) Возможно для внутреннего использования самим Profiler'ом.