使用Extended Events收集錯誤信息

擴展事件提供了一個輕量級的平臺可以用來收集錯誤信息,方便DBA查看最近的數據庫錯誤配合開發人員一起解決問題。

下面的例子我們創建extended event 會話來獲取錯誤208, 2812,and 4121。這三個錯誤分別對應:Invalid object name, Could not find stored procedure, and Cannotfind either column or the user-defined function or aggregate. 可以根據擴展事件sqlserver.error_reported。我們獲取下面的詳細信息:

sqlserver.session_id 

sqlserver.sql_text 

sqlserver.client_app_name 

sqlserver.client_hostname 

sqlserver.database_id 

sqlserver.username

通過這些信息我們可以瞭解到是哪個應用出現的問題儘快解決,創建擴展事件會話使用下面的腳本:

CREATEEVENTSESSION exErrors ONSERVER -- Session Name

ADDEVENT sqlserver.error_reported -- Event wewant to capture

(

ACTION -- What contents to capture

(

sqlserver.session_id

,sqlserver.sql_text

,sqlserver.client_app_name

,sqlserver.client_hostname

,sqlserver.database_id

,sqlserver.username

)

-- Somepredicate or filter (here it is object not found error number)

WHERE (error = 208

OR error  = 2812

OR error  = 4121

)

)

ADDTARGET package0.ring_buffer

WITH (max_dispatch_latency = 5seconds); -- Thetarget

GO

ALTEREVENTSESSION exErrors ONSERVERSTATE = START

GO

 

查詢錯誤信息的腳本:

 

WITH exErrors

AS (

SELECT CAST(target_data  ASxml) AS SessionData

FROMsys.dm_xe_session_targetsst

INNERJOINsys.dm_xe_sessions s ONs.address= st.event_session_address

WHERE name  ='exErrors'

)

SELECT

error.value('(@timestamp)[1]','datetime') as event_timestamp

,error.value('(data/value)[5]','varchar(max)') as [error_message]

,error.value('(data/value)[1]','int') as error

,error.value('(action/value)[3]','nvarchar(255)') AS client_app_name

,error.value('(action/value)[4]','nvarchar(255)') as client_hostname

,DB_NAME(error.value('(action/value)[5]','int')) AS database_name

,error.value('(action/value)[6]','nvarchar(128)') AS username

,error.value('(action/value)[2]','varchar(max)') as sql_text

,error.value('(action/value)[1]','int') as session_id

,error.value('(data/value)[4]','bit') as user_defined

FROM exErrors d

CROSSAPPLY SessionData.nodes('//RingBufferTarget/event')AS t(error)

WHERE error.value('@name','nvarchar(128)') ='error_reported';

結果如下:

SouthEast

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章