적용 대상:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric의 SQL 데이터베이스
이 문서에서는 확장 이벤트와 관련된 두 가지 시스템 보기 집합에 대해 설명합니다. 이 문서에서는 다음을 설명합니다.
- 다양한 시스템 보기 방법
JOIN -
SELECT시스템 뷰에서 특정 종류의 정보를 추출하는 방법입니다.
확장 이벤트에 대한 시스템 뷰 집합에는 두 가지가 있습니다.
카탈로그 뷰
- 이러한 뷰는 CREATE EVENT SESSION(Transact-SQL)에서 만든 각 이벤트 세션의 정의에 대한 정보를 저장합니다. 그러나 이러한 보기는 세션이 실행되기 시작했는지 여부에 대해서는 전혀 알지 못합니다.
- 예를 들어 SSMS 개체 탐색기에 이벤트 세션이 정의되지 않은 것으로 표시되면 보기
sys.server_event_session_targets에서 SELECTing은 0개의 행을 반환합니다.
- 예를 들어 SSMS 개체 탐색기에 이벤트 세션이 정의되지 않은 것으로 표시되면 보기
- 대부분의 예제는 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의 개체 탐색기에서 관리> 확장하여 새 세션 대화 상자를 시작한 다음 세션새 세션을 마우스 >클릭합니다.
큰 새 세션 대화 상자의 첫 번째 섹션인 일반레이블이 지정된 섹션에서 옵션이 서버 시작 시 이벤트 세션 시작으로 선택된 것을 확인할 수 있습니다.
다음으로 이벤트 섹션에서 해당 lock_deadlock 이벤트가 선택된 것을 볼 수 있습니다. 해당 이벤트에 세 개의 작업이 선택된 것을 볼 수 있습니다. 즉, 구성 단추가 선택되어 선택한 후 회색으로 표시됩니다.
다음으로, 이벤트>구성 섹션에서 resource_type 설정되었음을 확인합니다 PAGE. 즉, `resource_type` 값이 `PAGE`가 아닌 다른 경우에는 이벤트 엔진에서 대상에게 이벤트 데이터가 전송되지 않습니다.
데이터베이스 이름 및 카운터에 대한 추가 조건자 필터가 표시됩니다.
다음으로 데이터 스토리지 섹션에서 event_file이 대상으로 선택되었음을 확인할 수 있습니다. 또한 파일 롤오버 사용 옵션이 선택되었습니다.
마지막으로 고급 섹션에서 최대 디스패치 대기 시간 값이 4초로 감소했음을 확인할 수 있습니다.
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에서 쉽게 표시할 수 있도록 반환된 셀을 선택할 수 있습니다.
- 이벤트 세션이 중지되면
SELECT0개의 행이 반환됩니다. -
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>