SQL Server 扩展事件系列 (1 of 31) -- 扩展事件概述
1. SQL Server 擴展事件概述
SQL Server 2008引入了擴展事件(Extended Events),它提供了新的機制收信數據庫引擎的內部事件信息,具有高性能或高度可配置性。擴展事件的設計是主要專注于性能,尤其是與SQL Trace比較,開始會感得有點奇怪。但是,當你開始使用擴展事件,你將最有可能的舉動是考慮跟蹤的問題,并且你會發現擴展事件的強大。如果你還沒有使用過擴展事件,這一系列的博文可以幫助你快速學習擴展事件。這篇文章將在較高層面上介紹擴展事件,講述一些背景知識,后續的章節將基于這些前景知識。
擴展事件引擎
擴展事件引擎為擴展事件上管理對象和資源的中央控制器。引擎管理著負責處理從內存緩沖區到基于會話選項的目標的事件信息的進程池,也就是調度程序。引擎還維護著SQL Server實例已創建的事件會話信息和被引擎內部模塊注冊過的包的元數據。引擎本身不包括對象元數據。引擎主要是為可以注冊的包、可以創建事件會話和有消耗的事件信息提供平臺。
包 (Packages)
包是由擴展事件引擎的模塊注冊的,包括了模塊所包含的擴展事件對象的信息。包是擴展事件內部其它對象元數據的最底層容器。包可以是事件(events)、動作(actions)、目標(targes)、映射(maps)、謂詞(predicates)和類型(types)。在SQL Server 2008中,僅僅有四個包:sqlserver、sqlos、package0和一個僅供內部使用的SecAudit,SecAudit是用于服務器審計。sqlservr.exe加載了所有這些包。在Denali CTP1,還有三個額外的包:一個是由sqlserver加載,另外由其它模塊加載;sqlclr包是由sqlservr.exe加載,ucs(unified communications stack)包由sqlservr.exe加載。除了這些變化package0和sqlos模塊不再由sqlservr.exe加載,而是由sqldk.dll加載。
事件 (Events)
事件提供了包括事件的加載包的執行信息。一個事件和數據引擎內部的一個感興趣的特定的代碼點相對應。在SQL Server 2008中,一共有253個事件可以用來收集之前提到的信息。同時也有很多的事件,并非所有來自SQL Trace的公共事件都是由擴展事件實現。In SQL Server Denali CTP1中,事件增加到446,并且現在包括了所有SQL Trace的相對應的事件。每個事件信息返回對應的事件的特定代碼點,我指的是基本信息的有效載荷。基有效載荷中返回的信息的量是由包的元數據中的事件定義所決定,但可以通過使用動作(Event)來添加。
動作 (Actions)
動作是綁定到引擎中事件會話的具體事件,當那個事件發生時,執行指定的任務。事件通常做兩種類型的任務,要么收集被加到基礎有效負荷額外觸發事件的信息、普通全局狀態信息,如:session_id, sql_text等等, 要么執行引擎內部的任務,如:插入debug_break或執行內存轉儲分析。在SQL Server 2008中,有35個動作可以使用。在SQL Server Denali CTP 1中就有43個動作可以使用,包括了Trace列的映射,如context_info, database_name, and event_sequence,這些在SQL Server 2008都是不可用到的。
目標 (Targets)
目標是擴展事件的事件的目的地。多數目標是存儲駐留,只有當事件會話是活躍的在實例啟動的狀態,存在于內存。這些對于短期故障排除可能可用,如果是長期持續的事件就沒有必要了。一個文件目標同時存在,類似于SQL Trace中的Trace File,收集的信息存于文件系統,這樣就可以被其他人稍后轉移到其它地方進行分析。擴展事件有兩種類型的目標:具有線程緩沖事件的同步目標;和當緩沖區填滿時或超過一個事件的會話定義的最大分發持續時間,由引擎調度器發生的事件的異步目標。后續的章節會講述具體的目標。
映射(Maps)
映射提供擴展事件內部信息的信息檢索。映射提供一個用來定義事件會話和由事件會話收集的相關信息的特定類型的鍵值對。舉個例子:將引擎的鍵映射為wait_types的邏輯名,SQL Server內部會觸發wait_types。
謂詞(Predicates)
謂詞提供了擴展事件的過濾機制,被定義在具體的事件上,用于控制事件真正觸發的情況。擴展事件中的謂詞提供了短路開關,意思就是說如果第一個假評估謂詞的字符串中終止了評估就會阻止事件觸發,這樣已定義的謂詞評估就具有高性能。事件的基礎負荷返回的任何數據可以被定義為謂詞,引擎內部的可用全局狀態信息也可以被定義為謂詞。定義謂詞有兩種不同的方法,使用常用過慮子句條件,如:<,>, >=, <=, =, <>, LIKE, NOT LIKE,等等。但也可以使用包元數據中所包含的文本比較器定義。當引擎內部的一個會話起動時,任何使用常用過慮子句條件定義的謂詞被轉換為相應的文本比較方法。
類型(Types)
類型定義了擴展事件內部信息元素的數據類型。在SQL Server 2008中,有29種不同的類型,但是在SQL Server Denali CTP1中只有28種;database_context?類型被移除。除了定義包的類型,一些事件的數據元素將定義數據類型作為映射名字,它提供了數據元素返回信息的類型。
事件會話(Event Sessions)
事件會話是事件的集合,其相應的行動和謂詞和目標,這將是被收集的事件的目的地。定義的事件會話中存在擴展事件引擎,直到它們被顯式刪除會話,允許會話啟動,并在需要時停止而不必重新創建會話,即使是重啟服務。事件會話有許多配置選項,可以控制會話的功能,包括:服務啟動時是否自動啟動;事件觸發和被分發到目標之間的最大持續時間; 事件會話緩沖的可用內存量;內存如何分區;當緩沖區空間相對調度程序很快被占滿時,事件可能丟失時、如果事件丟失了或事件怎么丟失的。并且還有很多。一個事件會話要求最少有一個事件創建,但可以沒有目標,允許事件發生的地方,如:不需為損耗實際分發事件發生的內存轉儲。
What’s next?
弄明白了基本知識,下一章節我們一起研究DMV的元數據,看看如何獲得擴展事件對象的信息。想了解更多關于擴展事件的信息,請查看我在MSDN寫的白皮書Using SQL Server 2008 Extended Events?。
原文:http://www.sqlskills.com/blogs/jonathan/extended-events-overview/
注:如果有什么地方翻譯不妥,歡迎糾正。Thanks!
轉載于:https://www.cnblogs.com/sql-expert/p/3198307.html
總結
以上是生活随笔為你收集整理的SQL Server 扩展事件系列 (1 of 31) -- 扩展事件概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jdbc调用存储过程的方法
- 下一篇: T-SQL基础知识