안녕하세요.
XEVENTS에 대해서 하나하나 공부해가고 있는 1인입니다.
특정 PC에서 실행하는 쿼리 기록을 남기기 위해서 XEvents를 활용하고 있습니다.
얼마전에 서버가 엄청 느려져서 살펴보니 XEVENTS로 쌓인 로그를 가지고 오는데 있어서 문제가 생겼었습니다.
INSERT INTO [dbo].[DB_Audit_History] (
(생략)
)
SELECT ( 생략)
FROM (
SELECT CONVERT (XML, event_data) AS data
FROM sys.fn_xe_file_target_read_file
('D:\XEVENTS_LOG\DB_Audit_History*.xel', 'D:\XEVENTS_LOG\DB_Audit_History*.xem', null, null)
) entries
inner join sys.dm_exec_connections c on ( c.session_id = data.value ('(/event/action[@name=''session_id'']/value)[1]', 'varchar(10)') )
WHERE data.value ('(/event[@name=''sql_statement_completed'']/@timestamp)[1]', 'DATETIME') BETWEEN @START_DT AND @END_DT
이렇게 .xel, xem 파일로 쌓인 로그를 필터링 해서 테이블에 쌓게해놨는데요.
DB_Audit_History*.xel 요 파일들이 많아지고 크기가 커지면 많이 느려지는거 같더라구요.
질문 1 ) 그래서 이런 파일 관리는 어떻게 하면 좋을지 궁금해서 글을 올립니다.
xevent는 아래와같이 생성이 되었어요.
CREATE EVENT SESSION RealDB_Audit_History ON SERVER
ADD EVENT sqlserver.sql_statement_completed
(ACTION ( SQLSERVER.TSQL_STACK
(생략)
, SQLSERVER.session_id
)
WHERE (SQLSERVER.CLIENT_HOSTNAME = '특정pc1'
or SQLSERVER.CLIENT_HOSTNAME = '특정pc2') )
AND SQLSERVER.CLIENT_APP_NAME = 'Microsoft SQL Server Management Studio - 쿼리'
)
ADD TARGET package0.asynchronous_file_target
(SET FILENAME = N'D:\XEVENTS_LOG\DB_Audit_History.xel' (1)
, METADATAFILE = N'D:\XEVENTS_LOG\DB_Audit_History.xem'
, MAX_FILE_SIZE = 5
, MAX_ROLLOVER_FILES = 3
)
WITH (
max_dispatch_latency = 1 seconds
);
GO
아이구 질문이 장황하죠~
질문2. SET FILENAME = N'D:\XEVENTS_LOG\DB_Audit_History.xel' 요 부분에서 파일이름을 다이나믹하게 만들수는 없나여?
예를들어 매일 D:\XEVENTS_LOG\DB_Audit_History20150527.xel 이런식으로 파일이 하루하루 이름이 바뀌어서 생성되는거죠.
==> 혹시 이런식으로 하면 데이터를 불러올 때 별 문제가 없을거 같아서요.
시도해봤는데 잘 안되더라구요.
저는 sql server2008을 운영하고, XEVENT에 대해서 초 입문자라.. ^^
질문도 장황하게 올렸네요. 혹시 답변이나 지혜를 공유해주실 수 있는 분은 답글 부탁드려요~
그럼 이만 총춍!~
.