适用于:Analytics Platform System (PDW)
诊断会话允许保存有关系统或查询性能的详细用户定义的诊断信息。
诊断会话通常用于调试特定查询的性能,或在设备操作期间监视特定设备组件的行为。
注释
你应该熟悉 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 个,则诊断会话包含的事件数少于 100 个。 max_item_count_num 必须至少为 100 且小于或等于 100,000。
event_name
定义要在诊断会话中收集的实际事件。
event_name是其中sys.pdw_diag_eventssys.pdw_diag_events.is_enabled='True'中列出的事件之一。
filter_property_name
要对其限制结果的属性的名称。 例如,如果要根据会话 ID 进行限制, filter_property_name 应为 SessionId。 有关filter_property_name的潜在值列表,请参阅property_name参数。
价值
要针对 filter_property_name计算的值。 值类型必须与属性类型匹配。 例如,如果属性类型为十进制,则 值 的类型必须为十进制。
comp_type
比较类型。 潜在值为:Equals、、、EqualsOrGreaterThan、GreaterThanEqualsOrLessThan、LessThan、 NotEqualsContains和RegEx。
property_name
与事件相关的属性。 属性名称可以是捕获标记的一部分,也可以用作筛选条件的一部分。
| 属性名称 | Description |
|---|---|
UserName |
用户(登录名)名称。 |
SessionId |
会话 ID。 |
QueryId |
查询 ID。 |
CommandType |
命令类型。 |
CommandText |
已处理的命令中的文本。 |
OperationType |
事件的操作类型。 |
Duration |
事件的持续时间。 |
SPID |
会话 ID。 |
Remarks
每个用户最多允许 10 个并发诊断会话。 有关当前会话的列表,请参阅sys.pdw_diag_sessions,并使用 <
诊断会话将继续收集元数据,直到删除。
Permissions
需要 ALTER SERVER STATE 权限。
锁定
在诊断会话表上获取共享锁。
Examples
A. 创建诊断会话
此示例创建诊断会话来记录数据库引擎性能的指标。 该示例创建一个诊断会话,用于侦听引擎查询运行/结束事件和阻止 DMS 事件。 返回的内容是命令文本、计算机名称、请求 ID(查询 ID)和创建事件的会话。
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;