[SQL SERVER][Maintain]擴充的事件(1)
摡述
SQL Server 2008 導入了 SQL Server 擴充的事件,這是伺服器系統的事件基礎結構。
SQL Server 擴充的事件是以 ETW 為基礎,並且整合SQL Server Trace,
可以讓我們使用事件當做追蹤點,藉以追蹤 OS(收集效能資料) 、 IIS或其他 ETW 功能應用。
SQL Server 擴充的事件本身是同步產生事件資料及非同步處理資料
(但你也可以視需求來決定同步或非同步)。
處理效能方面相當有效率(SQL Server Audit 也是使用擴充的事件來記錄稽核的資訊),
並且不會大量消耗主機資源(CPU使用率相當低)。
了解相關概念
封裝(Packages):
封裝是 SQL Server 擴充事件物件的容器。
有四種擴充事件封裝,包括以下項目(透過 sys.dm_xe_packages DMV)
package0 - 擴充事件系統物件。這是預設封裝。
sqlos - SQL Server 作業系統 (SQLOS) 相關的物件。
sqlserver - SQL Server 相關的物件。
SecAudit - 僅提供SQL Server Audit 。
select * from sys.dm_xe_packages
(擷取部份)
事件(Events):
事件是程式 (例如 SQL Server) 之執行路徑中所要的監視點。
事件只能用來追蹤或是觸發動作,這些動作可以是同步或非同步。
--查詢SQL Server 所有預設事件(sys.dm_xe_objects)
select * from sys.dm_xe_objects where object_type = 'event' order by name
(擷取部份)
--查詢特定事件結構描述(sys.dm_xe_object_columns)
select * from sys.dm_xe_object_columns where object_name='audit_event'
(擷取部份)
述詞(Predicates):
述詞是一組邏輯規則,這些規則會在處理事件時加以評估。
如此可讓擴充的事件使用者選擇性地擷取以特定準則為根據的事件資料。
--查詢所有述詞
select * from sys.dm_xe_objects where object_type in ('pred_compare', 'pred_source') order by name
(擷取部份)
動作(Actions):
動作是針對事件的程式設計形式的回應或回應序列。
動作會繫結至事件,而每一個事件都可以有一組獨特的動作。
--查詢所有動作
select * from sys.dm_xe_objects where object_type='action' order by name
(擷取部份)
目標(Target):
目標會處理事件 (在引發事件的執行緒上同步處理,或是在系統提供的執行緒上非同步處理)。
一般來說,當必須維護特定的資料順序時,就會使用同步處理。
擴充的事件會提供幾個目標,您可適當地使用這些目標來導向事件輸出。
--查詢所有目標
select * from sys.dm_xe_objects where object_type='target' order by name
(擷取部份)
工作階段(Sessions):
工作階段是一個集合,可以包含數個物件,如事件、述詞、目標和動作。
--查詢所有工作階段所使用 buffer size(記憶體)和其他資訊。
select * from sys.dm_xe_sessions
(擷取部份)
類型和對應(Types and Maps):
Type 會封裝位元組集合的長度和特性,以便能夠解譯資料。
Maps 會將內部值對應到字串,如此可讓使用者得知該值所表示的意義。
--查詢所有類型和對應
select * from sys.dm_xe_objects where object_type in ('map', 'type') order by name
select * from sys.dm_xe_map_values
--取得鎖定模式對應值
select map_key, map_value from sys.dm_xe_map_values
where name = 'lock_mode'
(擷取部份)
參考