Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:система платформы аналитики (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;