標籤:監控 影響
SQL Server擴充事件(Extended Events)-- 效能注意事項
使用 CREATE EVENT SESSION 將擴充事件會話放置在一起時,需要認真正確配置一些設定,因為它們可能會在無意中對效能產生影響。首先需要決定是以同步還是非同步方式消耗事件。正如您所料,同步目標對所監控代碼的效能產生的影響要大過非同步目標。
如前所述,同步消耗某個事件時,觸發該事件的代碼必須一直等待,直到該事件被消耗為止。顯然,如果事件消耗是一個複雜的過程,則這可能會降低代碼的效能。
例如,在一個每秒處理數千個小事務的繁忙系統中,同步消耗 sql_statement_completed 事件及捕獲查詢計劃動作很可能會對效能產生負面影響。另外還要記住,謂詞始終是同步執行的,因此應注意不要為效能關鍵代碼觸發的事件建立過於複雜的謂詞。
另一方面,您可能會被強制同步消耗事件。要計算某個特定事件的出現次數,最簡單的方法很可能是使用 synchronous_event_counter 目標。
您必須考慮的第二件事情是如果決定使用非同步目標,那麼該如何配置事件緩衝。事件緩衝的預設可用記憶體數為 4MB。事件被觸發,隨後被目標消耗,期間的預設調度延遲為 30 秒。這意味著如果您希望每 10 秒產生一些事件統計資料,則必須對延遲時間進行調整。
對用於緩衝事件的記憶體進行分區的方法是將其綁定到事件緩衝設定。預設情況下是為整個執行個體建立一組緩衝區。在 SMP(對稱式多處理器)和 NUMA(非統一記憶體訪問)電腦中,這可能會使處理器不得不等待訪問記憶體,從而導致出現效能問題。
第三個注意事項是如何處理事件丟失。在定義擴充事件會話時,可指定事件是否可以“丟失”。這意味著如果沒有足夠的記憶體來緩衝某個事件,則可將其直接丟棄。預設設定是允許丟棄單個事件,但也可以允許整個事件緩衝區都丟失(適用於事件緩衝區很快就被填滿的會話),甚至還可以指定任何事件都不得丟失。
使用最後一個選項時應格外注意,因為它會強制觸發事件的代碼一直等待,直到有足夠的緩衝區記憶體來儲存該事件為止。設定此選項幾乎肯定會對效能產生不利影響。請注意,如果無意間啟用了此選項,伺服器仍會擁有足夠的響應能力讓您能夠禁用此設定。
通常,您需要通盤考慮這些選項。實際上我並沒有辦法為您提供通用的最佳方法,我能做的只是向您強調深入領會它們,否則您可能會遇到效能問題。
本文出自 “SQL Server Deep Dives” 部落格,請務必保留此出處http://ultrasql.blog.51cto.com/9591438/1599381
SQL Server擴充事件(Extended Events)-- 效能注意事項