다음을 통해 공유


시스템 뷰에서 확장 이벤트에 대한 SELECT 및 JOINs

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric의 SQL 데이터베이스

이 문서에서는 확장 이벤트와 관련된 두 가지 시스템 보기 집합에 대해 설명합니다. 이 문서에서는 다음을 설명합니다.

  • 다양한 시스템 보기 방법 JOIN
  • SELECT 시스템 뷰에서 특정 종류의 정보를 추출하는 방법입니다.

확장 이벤트에 대한 시스템 뷰 집합에는 두 가지가 있습니다.

카탈로그 뷰

  • 이러한 뷰는 CREATE EVENT SESSION(Transact-SQL)에서 만든 각 이벤트 세션의 정의에 대한 정보를 저장합니다. 그러나 이러한 보기는 세션이 실행되기 시작했는지 여부에 대해서는 전혀 알지 못합니다.
    • 예를 들어 SSMS 개체 탐색기에 이벤트 세션이 정의되지 않은 것으로 표시되면 보기 sys.server_event_session_targets 에서 SELECTing은 0개의 행을 반환합니다.
  • 대부분의 예제는 SQL Server 및 Azure SQL Managed Instance에 대해 작성됩니다. 그러나 약간의 수정을 통해 DMV 이름에서 server을/를 database으로 변경하면 Azure SQL Database 및 Fabric의 SQL 데이터베이스에서 실행할 수 있습니다.
    • sys.server_event_session* 는 SQL Server 및 Azure SQL Managed Instance의 이름 접두사입니다.
    • sys.database_event_session*는 Azure SQL Database 및 Fabric의 SQL 데이터베이스의 이름 접두사입니다.
    • 각각에 대한 자세한 내용은 확장 이벤트 카탈로그 뷰를 참조하세요.

DMV(동적 관리 뷰)

  • 실행 중인 이벤트 세션의 현재 활동에 대한 정보를 저장합니다. 그러나 이러한 DMV에는 세션의 정의에 대한 정보가 거의 없습니다.

    • 모든 이벤트 세션이 현재 중지되었더라도 SELECT는 보기 sys.dm_xe_packages에서 여전히 행을 반환할 수 있습니다. 이는 서버 시작 시 여러 패키지가 활성 메모리에 로드되기 때문입니다.
    • 같은 이유로 sys.dm_xe_objectssys.dm_xe_object_columns 여전히 행을 반환합니다.
  • 확장 이벤트 DMV에 대한 이름 접두사는 다음과 같습니다.

    • sys.dm_xe_* 는 SQL Server 및 Azure SQL Managed Instance의 이름 접두사입니다.
    • sys.dm_xe_database_* 는 일반적으로 Fabric의 Azure SQL Database 및 SQL 데이터베이스의 이름 접두사입니다.

Permissions

시스템 보기에서 SELECT하려면 다음 권한이 필요합니다.

  • SQL Server 2019(15.x) 및 이전 버전에는 서버에 대한 권한이 필요합니다 VIEW SERVER STATE .
  • SQL Server 2022(16.x) 이상 버전에는 서버에 대한 권한이 필요합니다 VIEW SERVER PERFORMANCE STATE .
  • Fabric의 Azure SQL Database 및 SQL 데이터베이스에는 데이터베이스에 대한 권한이 필요합니다 VIEW DATABASE PERFORMANCE STATE .

카탈로그 뷰

이 페이지의 목적을 위해 SSMS 또는 T-SQL을 사용하여 확장 이벤트 세션을 만듭니다. 최신 버전의 SSMS(SQL Server Management Studio)를 설치합니다.

SSMS(SQL Server Management Studio)에서 세션 만들기

SSMS의 개체 탐색기에서 관리> 확장하여 새 세션 대화 상자를 시작한 다음 세션새 세션을 마우스 >클릭합니다.

새 세션 대화 상자의 첫 번째 섹션인 일반레이블이 지정된 섹션에서 옵션이 서버 시작 시 이벤트 세션 시작으로 선택된 것을 확인할 수 있습니다.

새 세션 > 일반의 SSMS에서 서버 시작 시 이벤트 세션을 시작하는 스크린샷.

다음으로 이벤트 섹션에서 해당 lock_deadlock 이벤트가 선택된 것을 볼 수 있습니다. 해당 이벤트에 세 개의 작업이 선택된 것을 볼 수 있습니다. 즉, 구성 단추가 선택되어 선택한 후 회색으로 표시됩니다.

SSMS의 새 세션 > 이벤트, 글로벌 필드 (액션) 스크린샷

다음으로, 이벤트>구성 섹션에서 resource_type 설정되었음을 확인합니다 PAGE. 즉, `resource_type` 값이 `PAGE`가 아닌 다른 경우에는 이벤트 엔진에서 대상에게 이벤트 데이터가 전송되지 않습니다.

데이터베이스 이름 및 카운터에 대한 추가 조건자 필터가 표시됩니다.

SSMS의 새 세션 > 이벤트, 필터 조건자 필드(실행)의 스크린샷

다음으로 데이터 스토리지 섹션에서 event_file이 대상으로 선택되었음을 확인할 수 있습니다. 또한 파일 롤오버 사용 옵션이 선택되었습니다.

새 세션 > 데이터 스토리지의 SSMS eventfile_enablefileroleover 스크린샷

마지막으로 고급 섹션에서 최대 디스패치 대기 시간 값이 4초로 감소했음을 확인할 수 있습니다.

SSMS의 새 세션 고급 설정, 최대 디스패치 대기 시간 스크린샷>

T-SQL에서 이벤트 세션 만들기

이벤트 세션 정의를 만드는 방법에 관계없이 SSMS에서 세션을 완벽하게 일치하는 Transact-SQL 스크립트로 리버스 엔지니어링할 수 있습니다. 위의 새 세션 스크린샷을 검사하고 표시되는 사양을 다음 생성된 T-SQL CREATE EVENT SESSION 스크립트의 절과 비교할 수 있습니다.

이벤트 세션을 리버스 엔지니어링하려면 개체 탐색기에서 세션 노드를 마우스 오른쪽 단추로 클릭한 다음[ >CREATE> 선택할 수 있습니다.

CREATE EVENT SESSION [event_session_test3]
    ON SERVER  -- Or, if on Azure SQL Database, ON DATABASE.

    ADD EVENT sqlserver.lock_deadlock
    (
        SET
            collect_database_name = (1)
        ACTION
        (
            package0.collect_system_time,
            package0.event_sequence,
            sqlserver.client_hostname
        )
        WHERE
        (
            [database_name]           = N'InMemTest2'
            AND [package0].[counter] <= (16)
            AND [resource_type]       = (6)
        )
    )

    ADD TARGET package0.event_file
    (
        SET
            filename           = N'c:\temp\\event_session_test3_EF.xel',
            max_file_size      = (20),
            max_rollover_files = (2)
    )

    WITH
    (
        MAX_MEMORY            = 4096 KB,
        EVENT_RETENTION_MODE  = ALLOW_SINGLE_EVENT_LOSS,
        MAX_DISPATCH_LATENCY  = 4 SECONDS,
        MAX_EVENT_SIZE        = 0 KB,
        MEMORY_PARTITION_MODE = NONE,
        TRACK_CAUSALITY       = OFF,
        STARTUP_STATE         = ON
    );

카탈로그 뷰 SELECT JOIN UNION

다음 T-SQL SELECT 문은 여러 개의 작은 SELECT를 함께 UNION으로 만들기 때문에 길어집니다. 작은 SELECT를 모두 개별적으로 실행할 수 있습니다. 작은 SELECT는 다양한 시스템 카탈로그 뷰를 JOIN하는 방법을 보여 줍니다.

SELECT
        s.name        AS [Session-Name],
        '1_EVENT'     AS [Clause-Type],
        'Event-Name'  AS [Parameter-Name],
        e.name        AS [Parameter-Value]
    FROM
              sys.server_event_sessions         AS s
        JOIN  sys.server_event_session_events   AS e

            ON  e.event_session_id = s.event_session_id
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name         AS [Session-Name],
        '2_EVENT_SET'  AS [Clause-Type],
        f.name         AS [Parameter-Name],
        f.value        AS [Parameter-Value]
    FROM
              sys.server_event_sessions         AS s
        JOIN  sys.server_event_session_events   AS e

            ON  e.event_session_id = s.event_session_id

        JOIN  sys.server_event_session_fields   As f

            ON  f.event_session_id = s.event_session_id
            AND f.object_id        = e.event_id
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name              AS [Session-Name],
        '3_EVENT_ACTION'    AS [Clause-Type],

        a.package + '.' + a.name
                            AS [Parameter-Name],

        '(Not_Applicable)'  AS [Parameter-Value]
    FROM
              sys.server_event_sessions         AS s
        JOIN  sys.server_event_session_events   AS e

            ON  e.event_session_id = s.event_session_id

        JOIN  sys.server_event_session_actions  As a

            ON  a.event_session_id = s.event_session_id
            AND a.event_id         = e.event_id
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name                AS [Session-Name],
        '4_EVENT_PREDICATES'  AS [Clause-Type],
        e.predicate           AS [Parameter-Name],
        '(Not_Applicable)'    AS [Parameter-Value]
    FROM
              sys.server_event_sessions         AS s
        JOIN  sys.server_event_session_events   AS e

            ON  e.event_session_id = s.event_session_id
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name              AS [Session-Name],
        '5_TARGET'          AS [Clause-Type],
        t.name              AS [Parameter-Name],
        '(Not_Applicable)'  AS [Parameter-Value]
    FROM
              sys.server_event_sessions         AS s
        JOIN  sys.server_event_session_targets  AS t

            ON  t.event_session_id = s.event_session_id
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name          AS [Session-Name],
        '6_TARGET_SET'  AS [Clause-Type],
        f.name          AS [Parameter-Name],
        f.value         AS [Parameter-Value]
    FROM
              sys.server_event_sessions         AS s
        JOIN  sys.server_event_session_targets  AS t

            ON  t.event_session_id = s.event_session_id

        JOIN  sys.server_event_session_fields   As f

            ON  f.event_session_id = s.event_session_id
            AND f.object_id        = t.target_id
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name               AS [Session-Name],
        '7_WITH_MAX_MEMORY'  AS [Clause-Type],
        'max_memory'         AS [Parameter-Name],
        s.max_memory         AS [Parameter-Value]
    FROM
              sys.server_event_sessions  AS s
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name                  AS [Session-Name],
        '7_WITH_STARTUP_STATE'  AS [Clause-Type],
        'startup_state'         AS [Parameter-Name],
        s.startup_state         AS [Parameter-Value]
    FROM
              sys.server_event_sessions  AS s
    WHERE
        s.name = 'event_session_test3'

ORDER BY
    [Session-Name],
    [Clause-Type],
    [Parameter-Name]
;

출력

다음 표에서는 이전 실행의 출력을 SELECT JOIN UNION보여줍니다. 출력 매개 변수 이름 및 값은 이전 CREATE EVENT SESSION 문에 명확하게 표시되는 항목에 매핑됩니다.

Session-Name Clause-Type Parameter-Name Parameter-Value
event_session_test3 1_EVENT Event-Name lock_deadlock
event_session_test3 2_EVENT_SET collect_database_name 1
event_session_test3 3_EVENT_ACTION sqlserver.client_hostname (Not_Applicable)
event_session_test3 3_EVENT_ACTION sqlserver.collect_system_time (Not_Applicable)
event_session_test3 3_EVENT_ACTION sqlserver.event_sequence (Not_Applicable)
event_session_test3 4_EVENT_PREDICATES ([sqlserver]. [equal_i_sql_unicode_string]([database_name],N'InMemTest2') AND [package0]. [counter]<=(16)) (Not_Applicable)
event_session_test3 5_TARGET event_file (Not_Applicable)
event_session_test3 6_TARGET_SET filename c:\temp\event_session_test3_EF.xel
event_session_test3 6_TARGET_SET max_file_size 20
event_session_test3 6_TARGET_SET max_rollover_files 2
event_session_test3 7_WITH_MAX_MEMORY max_memory 4096
event_session_test3 7_WITH_STARTUP_STATE startup_state 1

이것으로 카탈로그 뷰 섹션이 완료되었습니다.

DMV(동적 관리 뷰)

이 섹션에서는 각각 특정한 유용한 비즈니스 목적을 제공하는 몇 가지 Transact-SQL SELECT 문을 제공합니다. 또한 SELECT는 원하는 새 용도로 DMV를 함께 사용할 수 JOIN 있는 방법을 보여 줍니다.

DMV의 참조 설명서는 확장 이벤트 동적 관리 뷰에서 사용할 수 있습니다.

확장 이벤트 영역에서 사용할 수 있는 모든 개체는 시스템에 로드된 패키지에서 제공됩니다. 이 섹션에서는 모든 패키지와 해당 설명을 나열합니다.

SELECT  --C.1
        p.name         AS [Package],
        p.description  AS [Package-Description]
    FROM
        sys.dm_xe_packages  AS p
    ORDER BY
        p.name;

출력

패키지 목록은 다음과 같습니다.

Package Package-Description
filestream SQL Server FILESTREAM 및 FileTable에 대한 확장 이벤트
package0 기본 패키지. 모든 표준 형식, 맵, 비교 연산자, 작업 및 대상 포함
qds 쿼리 저장소에 대한 확장 이벤트
SecAudit 보안 감사 이벤트
sqlclr SQL CLR에 대한 확장 이벤트
sqlos SQL 운영 체제에 대한 확장 이벤트
SQLSatellite SQL Server Machine Learning Services에 대한 확장 이벤트
sqlserver Microsoft SQL Server에 대한 확장 이벤트
sqlsni Microsoft SQL Server에 대한 확장 이벤트
ucs Unified Communications 스택에 대한 확장 이벤트
XtpCompile XTP 컴파일에 대한 확장 이벤트
XtpEngine XTP 엔진에 대한 확장 이벤트
XtpRuntime XTP 런타임에 대한 확장 이벤트

앞의 두문자어 정의:

  • clr = .NET의 공용 언어 런타임
  • qds = 쿼리 데이터 저장소
  • sni = 서버 네트워크 인터페이스
  • ucs = 통합 통신 스택
  • xtp = 극단적인 트랜잭션 처리

유형별로 정렬된 사용 가능한 모든 항목 선택

다음은 SELECT 각 개체에 대해 하나의 행을 반환합니다.

SELECT  --C.3
        o.object_type  AS [Type-of-Item],
        p.name         AS [Package],
        o.name         AS [Item],
        o.description  AS [Item-Description]
    FROM
             sys.dm_xe_objects  AS o
        JOIN sys.dm_xe_packages AS p  ON o.package_guid = p.guid
    WHERE
        o.object_type IN ('action' , 'target' , 'pred_source')
        AND
        (
            (o.capabilities & 1) = 0
            OR
            o.capabilities IS NULL
        )
    ORDER BY
        [Type-of-Item],
        [Package],
        [Item];

이벤트에 사용할 수 있는 데이터 필드

다음은 SELECT 이벤트 유형에 특정한 모든 데이터 필드를 반환합니다.

  • 절 항목은 다음과 같습니다 WHEREcolumn_type = 'data'.
  • 또한 WHERE에 대한 o.name = 절 값을 편집해야 합니다.
SELECT  -- C.4
        p.name         AS [Package],
        c.object_name  AS [Event],
        c.name         AS [Column-for-Predicate-Data],
        c.description  AS [Column-Description]
    FROM
              sys.dm_xe_object_columns  AS c
        JOIN  sys.dm_xe_objects         AS o

            ON  o.name = c.object_name

        JOIN  sys.dm_xe_packages        AS p

            ON  p.guid = o.package_guid
    WHERE
        c.column_type = 'data'
        AND
        o.object_type = 'event'
        AND
        o.name        = '\<EVENT-NAME-HERE!>'  --'lock_deadlock'
    ORDER BY
        [Package],
        [Event],
        [Column-for-Predicate-Data];

출력

다음 행은 이전 SELECT, WHERE o.name = 'lock_deadlock'에서 반환되었습니다.

  • 각 행은 이벤트에 대한 선택적 필터를 sqlserver.lock_deadlock 나타냅니다.
  • Column-Description 열은 다음의 표시에서 생략됩니다. 해당 값은 종종 NULL.
  • 이 출력은 종종 NULL로 표시되는 설명 열이 생략된 것을 제외하고는 실제 결과입니다.
  • 이러한 행은 다음과 같습니다 WHERE object_type = 'lock_deadlock'.
Package 이벤트 Column-for-Predicate-Data
sqlserver lock_deadlock associated_object_id
sqlserver lock_deadlock database_id
sqlserver lock_deadlock database_name
sqlserver lock_deadlock deadlock_id
sqlserver lock_deadlock duration
sqlserver lock_deadlock lockspace_nest_id
sqlserver lock_deadlock lockspace_sub_id
sqlserver lock_deadlock lockspace_workspace_id
sqlserver lock_deadlock mode
sqlserver lock_deadlock object_id
sqlserver lock_deadlock owner_type
sqlserver lock_deadlock resource_0
sqlserver lock_deadlock resource_1
sqlserver lock_deadlock resource_2
sqlserver lock_deadlock resource_description
sqlserver lock_deadlock resource_type
sqlserver lock_deadlock transaction_id

sys.dm_xe_map_values 및 관련 이벤트 필드

다음 SELECT에는 JOIN 보기로의 sys.dm_xe_map_values이 포함되어 있습니다.

이벤트 세션에서 선택할 수 있는 다양한 필드를 표시하는 데 SELECT가 사용됩니다. 이벤트 필드는 다음 두 가지 방법으로 사용할 수 있습니다.

  • 이벤트 발생 시 대상에 기록될 필드 값을 지정하려면
  • 대상에서 어떤 이벤트 발생을 전송할지 보관할지 필터링하기 위해
SELECT  --C.5
        dp.name         AS [Package],
        do.name         AS [Object],
        do.object_type  AS [Object-Type],
        'o--c'     AS [O--C],
        dc.name         AS [Column],
        dc.type_name    AS [Column-Type-Name],
        dc.column_type  AS [Column-Type],
        dc.column_value AS [Column-Value],
        'c--m'     AS [C--M],
        dm.map_value    AS [Map-Value],
        dm.map_key      AS [Map-Key]
    FROM      sys.dm_xe_objects         AS do
        JOIN  sys.dm_xe_object_columns  AS dc
            ON  dc.object_name = do.name
        JOIN  sys.dm_xe_map_values      AS dm
            ON  dm.name = dc.type_name
        JOIN  sys.dm_xe_packages        AS dp
            ON  dp.guid = do.package_guid
    WHERE
        do.object_type = 'event'
        AND
        do.name        = '\<YOUR-EVENT-NAME-HERE!>'  --'lock_deadlock'
    ORDER BY
        [Package],
        [Object],
        [Column],
        [Map-Value];

출력

다음은 이전 T-SQL SELECT의 실제 100개 이상의 출력 행을 샘플링하는 것입니다. resource_type 행은 이 문서의 다른 곳에서 다루어진 event_session_test3 예제의 조건 필터링과 관련이 있습니다.

/***  5 sampled rows from the actual rows returned.
    NOTE:  'resource_type' under 'Column'.

Package     Object          Object-Type   O--C   Column          Column-Type-Name     Column-Type   Column-Value   C--M   Map-Value        Map-Key
-------     ------          -----------   ----   ------          ----------------     -----------   ------------   ----   ---------        -------
sqlserver   lock_deadlock   event         o--c   CHANNEL         etw_channel          readonly      2              c--m   Operational      4
sqlserver   lock_deadlock   event         o--c   KEYWORD         keyword_map          readonly      16             c--m   access_methods   1024
sqlserver   lock_deadlock   event         o--c   mode            lock_mode            data          NULL           c--m   IX               8
sqlserver   lock_deadlock   event         o--c   owner_type      lock_owner_type      data          NULL           c--m   Cursor           2
sqlserver   lock_deadlock   event         o--c   resource_type   lock_resource_type   data          NULL           c--m   PAGE             6

Therefore, on your CREATE EVENT SESSION statement, in its ADD EVENT WHERE clause,
you could put:
    WHERE( ... resource_type = 6 ...)  -- Meaning:  6 = PAGE.
***/

대상에 대한 매개 변수

다음은 SELECT 대상에 대한 모든 매개 변수를 반환합니다. 각 매개 변수에는 필수 여부를 나타내는 태그가 지정됩니다. 매개 변수에 할당하는 값은 대상의 동작에 영향을 줍니다.

  • 절 항목은 다음과 같습니다 WHEREobject_type = 'customizable'.
  • 또한 WHERE에 대한 o.name = 절 값을 편집해야 합니다.
SELECT  --C.6
        p.name        AS [Package],
        o.name        AS [Target],
        c.name        AS [Parameter],
        c.type_name   AS [Parameter-Type],

        CASE c.capabilities_desc
            WHEN 'mandatory' THEN 'YES_Mandatory'
            ELSE 'Not_mandatory'
        END  AS [IsMandatoryYN],

        c.description AS [Parameter-Description]
    FROM
              sys.dm_xe_objects   AS o
        JOIN  sys.dm_xe_packages  AS p

            ON  o.package_guid = p.guid

        LEFT OUTER JOIN  sys.dm_xe_object_columns  AS c

            ON  o.name        = c.object_name
            AND c.column_type = 'customizable'  -- !
    WHERE
        o.object_type = 'target'
        AND
        o.name     LIKE '%'    -- Or '\<YOUR-TARGET-NAME-HERE!>'.
    ORDER BY
        [Package],
        [Target],
        [IsMandatoryYN]  DESC,
        [Parameter];

출력

다음 매개 변수 행은 이전 SELECT에서 반환한 매개 변수의 작은 하위 집합입니다.

/***  Actual output, all rows, where target name = 'event_file'.
Package    Target       Parameter            Parameter-Type       IsMandatoryYN   Parameter-Description
-------    ------       ---------            --------------       -------------   ---------------------
package0   event_file   filename             unicode_string_ptr   YES_Mandatory   Specifies the location and file name of the log
package0   event_file   increment            uint64               Not_mandatory   Size in MB to grow the file
package0   event_file   lazy_create_blob     boolean              Not_mandatory   Create blob upon publishing of first event buffer, not before.
package0   event_file   max_file_size        uint64               Not_mandatory   Maximum file size in MB
package0   event_file   max_rollover_files   uint32               Not_mandatory   Maximum number of files to retain
package0   event_file   metadatafile         unicode_string_ptr   Not_mandatory   Not used
***/

DMV SELECT에서 target_data 열을 XML로 변환하기

활성 DMV SELECT 이벤트 세션의 대상에서 데이터 행을 반환합니다. 데이터는 XML로 캐스팅되므로 SSMS에서 쉽게 표시할 수 있도록 반환된 셀을 선택할 수 있습니다.

  • 이벤트 세션이 중지되면 SELECT 0개의 행이 반환됩니다.
  • WHERE의 절 값을 s.name = 에 대해 편집해야 합니다.
SELECT  --C.7
        s.name,
        t.target_name,
        CAST(t.target_data AS XML)  AS [XML-Cast]
    FROM
              sys.dm_xe_session_targets  AS t
        JOIN  sys.dm_xe_sessions         AS s

            ON s.address = t.event_session_address
    WHERE
        s.name = '\<Your-Session-Name-Here!>';

출력, 해당 XML 셀을 포함한 유일한 행

다음은 앞 SELECT의 출력인 유일한 행입니다. 열 XML-Cast 에는 SSMS에서 XML로 이해하는 XML 문자열이 포함되어 있습니다. 따라서 SSMS는 셀을 XML-Cast 선택할 수 있도록 해야 한다는 것을 이해합니다.

이 실행의 특징:

  • s.name = checkpoint_begin 이벤트의 이벤트 세션으로 설정되었습니다.
  • 대상은 ring_buffer였습니다.
name                              target_name   XML-Cast
----                              -----------   --------
checkpoint_session_ring_buffer2   ring_buffer   <RingBufferTarget truncated="0" processingTime="0" totalEventsProcessed="2" eventCount="2" droppedCount="0" memoryUsed="104"><event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:23.508Z"><data name="database_id"><type name="uint32" package="package0" /><value>5</value></data></event><event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:26.975Z"><data name="database_id"><type name="uint32" package="package0" /><value>5</value></data></event></RingBufferTarget>

셀을 선택할 때, XML이 깔끔하게 표시됨.

XML-Cast 셀을 선택하면 다음과 같은 예쁜 디스플레이가 나타납니다.

<RingBufferTarget truncated="0" processingTime="0" totalEventsProcessed="2" eventCount="2" droppedCount="0" memoryUsed="104">
  <event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:23.508Z">
    <data name="database_id">
      <type name="uint32" package="package0" />
      <value>5</value>
    </data>
  </event>
  <event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:26.975Z">
    <data name="database_id">
      <type name="uint32" package="package0" />
      <value>5</value>
    </data>
  </event>
</RingBufferTarget>

디스크 드라이브에서 event_file 데이터를 검색하는 함수에서 SELECT

이벤트 세션이 일부 데이터를 수집하고 나중에 중지되었다고 가정합니다. 세션이 event_file 대상을 사용하도록 정의된 경우 함수 sys.fn_xe_target_read_file를 호출하여 데이터를 검색할 수 있습니다.

  • SELECT함수를 실행하기 전에 경로 및 파일 이름을 함수 호출의 매개 변수로 편집해야 합니다.
    • 세션을 다시 시작할 때마다 SQL 시스템이 실제 .XEL 파일 이름에 포함시키는 추가 숫자는 무시해도 됩니다. 기본 루트 이름과 확장명만 지정합니다.
SELECT  --C.8
        f.module_guid,
        f.package_guid,
        f.object_name,
        f.file_name,
        f.file_offset,
        CAST(f.event_data AS XML)  AS [Event-Data-As-XML]
    FROM
        sys.fn_xe_file_target_read_file(

            '\<YOUR-PATH-FILE-NAME-ROOT-HERE!>*.xel',
            --'c:\temp\\Checkpoint_Begins_ES*.xel',  -- Example.

            NULL, NULL, NULL
        )  AS f;

출력, SELECT FROM 함수에서 반환된 행

다음은 이전 SELECT FROM 함수에서 반환하는 행입니다. Event-Data-As-XML XML 열에는 특히 이벤트 발생에 대한 데이터가 포함됩니다.

module_guid                            package_guid                           object_name        file_name                                                           file_offset   Event-Data-As-XML
-----------                            ------------                           -----------        ---------                                                           -----------   -----------------
D5149520-6282-11DE-8A39-0800200C9A66   03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2   checkpoint_begin   c:\temp\\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel   5120          <event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T03:30:14.023Z"><data name="database_id"><value>5</value></data><action name="session_id" package="sqlserver"><value>60</value></action><action name="database_id" package="sqlserver"><value>5</value></action></event>
D5149520-6282-11DE-8A39-0800200C9A66   03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2   checkpoint_end     c:\temp\\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel   5120          <event name="checkpoint_end" package="sqlserver" timestamp="2016-07-09T03:30:14.025Z"><data name="database_id"><value>5</value></data></event>
D5149520-6282-11DE-8A39-0800200C9A66   03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2   checkpoint_begin   c:\temp\\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel   5632          <event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T03:30:17.704Z"><data name="database_id"><value>5</value></data><action name="session_id" package="sqlserver"><value>60</value></action><action name="database_id" package="sqlserver"><value>5</value></action></event>
D5149520-6282-11DE-8A39-0800200C9A66   03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2   checkpoint_end     c:\temp\\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel   5632          <event name="checkpoint_end" package="sqlserver" timestamp="2016-07-09T03:30:17.709Z"><data name="database_id"><value>5</value></data></event>

출력, 하나의 XML 셀

다음은 앞의 반환된 행 집합에서 첫 번째 XML 셀의 내용입니다.

<event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T03:30:14.023Z">
  <data name="database_id">
    <value>5</value>
  </data>
  <action name="session_id" package="sqlserver">
    <value>60</value>
  </action>
  <action name="database_id" package="sqlserver">
    <value>5</value>
  </action>
</event>