CREATE DIAGNOSTICS SESSION (Transact-SQL)

Область применения:система платформы аналитики (PDW)

Сеансы диагностики позволяют сохранять подробные пользовательские диагностические сведения о производительности системы или запросов.

Сеансы диагностики обычно используются для отладки производительности для определенного запроса или отслеживания поведения определенного компонента устройства во время операции устройства.

Note

Чтобы использовать сеансы диагностики, необходимо ознакомиться с XML.

Syntax

-- Creating a new diagnostics session:
CREATE DIAGNOSTICS SESSION diagnostics_name AS N' { <session_xml> } ';

<session_xml>::
<Session>
   [ <MaxItemCount>max_item_count_num</MaxItemCount> ]
   [ <Filter>
      { <Event Name = "event_name"/>
         [ <Where><filter_property_name Name = "value" ComparisonType = "comp_type"/></Where> ] [ , ...n ]
      } [ , ...n ]
   </Filter> ]
   <Capture>
      <Property Name = "property_name"/> [ , ...n ]
   </Capture>
<Session>

-- Retrieving results for a diagnostics session:
SELECT * FROM master.sysdiag.diagnostics_name ;

-- Removing results for a diagnostics session:
DROP DIAGNOSTICS SESSION diagnostics_name ;

Аргументы

diagnostics_name

Имя сеанса диагностики. Имена сеансов диагностики могут включать только символы a-z, A-Z и 0-9. Кроме того, имена сеансов диагностики должны начинаться с символа. diagnostics_name ограничено 127 символами.

max_item_count_num

Количество событий, которые необходимо сохранить в представлении. Например, если задано значение 100, последние события, соответствующие критериям фильтра, сохраняются в сеансе диагностики. Если обнаружено менее 100 событий сопоставления, сеанс диагностики содержит менее 100 событий. max_item_count_num должно быть не менее 100 и меньше или равно 100 000.

event_name

Определяет фактические события, собираемые в сеансе диагностики. event_name является одним из событий, перечисленных в sys.pdw_diag_events где sys.pdw_diag_events.is_enabled='True'.

filter_property_name

Имя свойства, для которого требуется ограничить результаты. Например, если требуется ограничиться на основе идентификатора сеанса, filter_property_name должен быть SessionId. Список потенциальных значений для filter_property_name см. в аргументе property_name.

значение

Значение для вычисления по filter_property_name. Тип значения должен соответствовать типу свойства. Например, если тип свойства является десятичным, тип значения должен быть десятичным.

comp_type

Тип сравнения. Возможные значения: Equals, EqualsOrGreaterThan, EqualsOrLessThan, GreaterThanLessThan, , NotEquals, Containsи RegEx.

property_name

Свойство, связанное с событием. Имена свойств могут быть частью тега записи или использоваться в рамках критериев фильтрации.

Имя свойства Description
UserName Имя пользователя (имя входа).
SessionId Идентификатор сеанса.
QueryId Идентификатор запроса.
CommandType Тип команды.
CommandText Текст в обработанной команде.
OperationType Тип операции для события.
Duration Длительность события.
SPID Идентификатор сессии.

Remarks

Каждому пользователю разрешено не более 10 одновременных сеансов диагностики. См. sys.pdw_diag_sessions список текущих сеансов и удаление ненужных сеансов с помощью DROP DIAGNOSTICS SESSION.

Сеансы диагностики продолжают собирать метаданные до удаления.

Permissions

Требуется разрешение ALTER SERVER STATE.

Блокировка

Принимает общую блокировку таблицы диагностических сеансов.

Examples

A. Создание сеанса диагностики

В этом примере создается сеанс диагностики для записи метрик производительности ядра СУБД. В примере создается сеанс диагностики, прослушивающий события запуска и завершения обработчика, а также блокирующее событие DMS. Возвращается текст команды, имя компьютера, идентификатор запроса (идентификатор запроса) и сеанс, в котором было создано событие.

CREATE DIAGNOSTICS SESSION MYDIAGSESSION AS N'
<Session>
   <MaxItemCount>100</MaxItemCount>
   <Filter>
      <Event Name="EngineInstrumentation:EngineQueryRunningEvent" />
      <Event Name="DmsCoreInstrumentation:DmsBlockingQueueEnqueueBeginEvent" />
      <Where>
         <SessionId Value="381" ComparisonType="NotEquals" />
      </Where>
   </Filter>
   <Capture>
      <Property Name="Query.CommandText" />
      <Property Name="MachineName" />
      <Property Name="Query.QueryId" />
      <Property Name="Alias" />
      <Property Name="Duration" />
      <Property Name="Session.SessionId" />
   </Capture>
</Session>';

После создания сеанса диагностики запустите запрос.

SELECT COUNT(EmployeeKey)
FROM AdventureWorksPDW2012..FactSalesQuota;

Затем просмотрите результаты сеанса диагностики, выбрав схему sysdiag.

SELECT * FROM master.sysdiag.MYDIAGSESSION;

Схема sysdiag содержит представление, которое называется именем сеанса диагностики.

Чтобы просмотреть только действие для подключения, добавьте Session.SPID свойство и добавьте WHERE [Session.SPID] = @@spid; в запрос.

Завершив сеанс диагностики, удалите его с помощью DROP DIAGNOSTICS команды.

DROP DIAGNOSTICS SESSION MYDIAGSESSION;

B. Альтернативный диагностический сеанс

Второй пример с небольшими разными свойствами.

-- Determine the session_id of your current session
SELECT TOP 1 session_id();

-- Replace <session_number> in the code below with the numbers in your session_id
CREATE DIAGNOSTICS SESSION PdwOptimizationDiagnostics AS N'
<Session>
   <MaxItemCount>100</MaxItemCount>
   <Filter>
      <Event Name="EngineInstrumentation:MemoGenerationBeginEvent" />
      <Event Name="EngineInstrumentation:MemoGenerationEndEvent" />
      <Event Name="DSQLInstrumentation:OptimizationBeginEvent" />
      <Event Name="DSQLInstrumentation:OptimizationEndEvent" />
      <Event Name="DSQLInstrumentation:BuildRelOpContextTreeBeginEvent" />
      <Event Name="DSQLInstrumentation:PostPlanGenModifiersEndEvent" />
      <Where>
         <SessionId Value="<session_number>" ComparisonType="Equals" />
      </Where>
   </Filter>
   <Capture>
      <Property Name="Session.SessionId" />
      <Property Name="Query.QueryId" />
      <Property Name="Query.CommandText" />
      <Property Name="Name" />
      <Property Name="DateTimePublished" />
      <Property Name="DateTimePublished.Ticks" />
  </Capture>
</Session>';

Запустите запрос, например:

USE ssawPDW;
GO

SELECT * FROM dbo.FactFinance;

Следующий запрос возвращает время авторизации:

SELECT *
FROM master.sysdiag.PdwOptimizationDiagnostics
ORDER BY DateTimePublished;

Завершив сеанс диагностики, удалите его с помощью DROP DIAGNOSTICS команды.

DROP DIAGNOSTICS SESSION PdwOptimizationDiagnostics;