Share via


CREATE DIAGNOSTICS SESSION(Transact-SQL)

적용 대상:분석 플랫폼 시스템(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 ;  

참고 항목

SQL Server 2014(12.x) 및 이전 버전에 대한 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조 하세요.

인수

diagnostics_name
진단 세션의 이름입니다. 진단 세션 이름은 문자 a-z, A-Z 및 0-9로만 이루어져야 합니다. 또한 진단 세션 이름은 문자로 시작해야 합니다. 진단_name 127자로 제한됩니다.

max_item_count_num
보기에 유지할 이벤트 수입니다. 예를 들어 100을 지정하면 필터 조건과 일치하는 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
결과를 제한할 속성의 이름입니다. 예를 들어 세션 ID에 따라 제한하려는 경우 filter_property_name SessionId여야 합니다. filter_property_name 대한 잠재적 값 목록은 아래 property_name 참조하세요.

value
filter_property_name 대해 평가할 값입니다. 값 형식은 속성 형식과 일치해야 합니다. 예를 들어 속성 형식이 10진수이면 값 형식은 10진수여야 합니다.

comp_type
비교 유형입니다. 잠재적 값은:Equals, EqualsOrGreaterThan, EqualsOrLessThan, GreaterThan, LessThan, NotEquals, Contains, RegEx입니다.

property_name
이벤트와 관련된 속성입니다. 속성 이름은 캡처 태그의 일부이거나 필터링 조건의 일부로 사용될 수 있습니다.

속성 이름 설명
UserName 사용자(로그인) 이름입니다.
세션 ID 세션 ID입니다.
QueryId 쿼리 ID입니다.
CommandType 명령 유형입니다.
CommandText 처리된 명령 내의 텍스트입니다.
OperationType 이벤트에 대한 작업 유형입니다.
기간 이벤트의 기간입니다.
SPID 서비스 프로세스 ID입니다.

설명

각 사용자는 최대 10개의 동시 진단 세션이 허용됩니다. 현재 세션 목록은 sys.pdw_diag_sessions 참조하고 다음을 사용하여 DROP DIAGNOSTICS SESSION불필요한 세션을 삭제합니다.

진단 세션은 삭제될 때까지 메타데이터를 계속 수집합니다.

사용 권한

ALTER SERVER STATE 권한이 필요합니다.

잠금

진단 세션 테이블에서 공유 잠금을 사용합니다.

예제

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;