Рейтинг:0

проблема с чтением расширенных XML-событий MSSQL

флаг cn

В настоящее время мне интересно, может ли кто-нибудь пролить свет на проблему, с которой я сталкиваюсь.

В настоящее время я пытаюсь использовать этот учебник, чтобы найти заблокированные процессы и взаимоблокировки. https://www.brentozar.com/archive/2014/03/extended-events-doesnt-hard/#comment-3481472 Я выполнил шаги, как написано в учебнике, поэтому не уверен, что я сделал неправильно.

После сбора событий я запускаю этот запрос:

С events_cte КАК (
  ВЫБРАТЬ
    xevents.event_data,
    DATEADD(ми,
    DATEDIFF(ми, GETUTCDATE(), CURRENT_TIMESTAMP),
    xevents.event_data.value(
      '(event/@timestamp)[1]', 'datetime2')) AS [время события] ,
    xevents.event_data.value(
      '(событие/действие[@name="client_app_name"]/значение)[1]', 'nvarchar(128)')
      AS [имя клиентского приложения],
    xevents.event_data.value(
      '(событие/действие[@name="client_hostname"]/значение)[1]', 'nvarchar(max)')
      AS [имя хоста клиента],
    xevents.event_data.value(
      '(событие[@name="blocked_process_report"]/данные[@name="database_name"]/значение)[1]', 'nvarchar(max)')
      AS [имя базы данных],
    xevents.event_data.value(
      '(событие[@name="blocked_process_report"]/данные[@name="database_id"]/значение)[1]', 'int')
      AS [идентификатор_базы_данных],
    xevents.event_data.value(
      '(событие[@name="blocked_process_report"]/данные[@name="object_id"]/значение)[1]', 'int')
      КАК [идентификатор_объекта],
    xevents.event_data.value(
      '(событие[@name="blocked_process_report"]/данные[@name="index_id"]/значение)[1]', 'int')
      AS [идентификатор_индекса],
    xevents.event_data.value(
      '(событие[@name="blocked_process_report"]/данные[@name="длительность"]/значение)[1]', 'bigint') / 1000
      AS [длительность (мс)],
    xevents.event_data.value(
      '(событие[@name="blocked_process_report"]/данные[@name="lock_mode"]/текст)[1]', 'varchar')
      AS [режим_блокировки],
    xevents.event_data.value(
      '(событие[@name="blocked_process_report"]/данные[@name="login_sid"]/значение)[1]', 'int')
      AS [логин_сид],
    xevents.event_data.query(
      '(событие[@name="отчет_о_заблокированном_процессе"]/данные[@name="отчет_о_заблокированном_процессе"]/значение/отчет о заблокированном_процессе)[1]')
      КАК блокируемый_процесс_отчет,
    xevents.event_data.query(
      '(событие/данные[@name="xml_report"]/значение/тупик)[1]')
      AS deadlock_graph
  ИЗ sys.fn_xe_file_target_read_file
    ('C:\temp\XEventSessions\blocked_process*.xel',
     'C:\temp\XEventSessions\blocked_process*.xem',
     ноль ноль)
    ПЕРЕКРЕСТНОЕ ПРИМЕНЕНИЕ (ВЫБРАТЬ CAST(event_data AS XML) AS event_data) как xevents
)
ВЫБРАТЬ
  СЛУЧАЙ, КОГДА block_process_report.value('(blocked-process-report[@monitorLoop])[1]', 'nvarchar(max)') IS NULL
       ТОГДА «Тупик»
       ИНАЧЕ 'Заблокированный процесс'
       КОНЕЦ КАК Тип отчета,
  [время события],
  CASE [имя клиентского приложения] WHEN '' THEN ' -- Н/Д -- '
                         ELSE [имя клиентского приложения]
                         ЗАВЕРШИТЬ КАК [имя клиентского приложения _],
  CASE [имя хоста клиента] WHEN '' THEN ' -- N/A -- '
                          ELSE [имя хоста клиента]
                          END AS [имя хоста клиента],
  [имя базы данных],
  COALESCE(OBJECT_SCHEMA_NAME(object_id, database_id), ' -- N/A -- ') AS [схема],
  COALESCE(OBJECT_NAME(object_id, database_id), ' -- N/A -- ') AS [table],
  индекс_идентификатор,
  [длительность (мс)],
  режим блокировки,
  COALESCE(SUSER_NAME(login_sid), ' -- N/A -- ') КАК имя пользователя,
  СЛУЧАЙ, КОГДА block_process_report.value('(blocked-process-report[@monitorLoop])[1]', 'nvarchar(max)') IS NULL
       ТОГДА deadlock_graph
       ИНАЧЕ блокируемый_процесс_отчет
       КОНЕЦ КАК Отчет
ОТ events_cte
ORDER BY [время события] DESC ;

Но я получаю такой результат:

Сообщение 9415, уровень 16, состояние 1, строка 1
Разбор XML: строка 39, символ 109, правильность проверки: отсутствие '<' в значении атрибута

Любые идеи?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.