SQL 擴展事件

来源:http://www.cnblogs.com/wenBlog/archive/2016/07/10/5658725.html
-Advertisement-
Play Games

在本篇,我通過使用新建“Session ”對話框來創建新的擴展事件會話。定義一個自己的擴展事件,動作和謂詞,並且發佈一個以收集事件數據為目的的會話。 首先從UI開始 在SQLServer2008R2以後(不包括2008R2),才引入擴展事件的內置UI。2008的版本可以通過安裝插件的形式或者使用T- ...


 

    在本篇,我通過使用新建“Session ”對話框來創建新的擴展事件會話。定義一個自己的擴展事件,動作和謂詞,並且發佈一個以收集事件數據為目的的會話。

首先從UI開始

    在SQLServer2008R2以後(不包括2008R2),才引入擴展事件的內置UI。2008的版本可以通過安裝插件的形式或者使用T-sql語句來實現擴展事件。如果是2012以後的SSMS客戶端,也可以訪問2008 的資料庫實例,但是看不到擴展事件UI。在2008版本中缺少UI,意味著必須寫T-SQL和XQuery來挖掘事件數據。2012以後提供了UI來讀取2008版本中的目標文件,同時也能使用UI來進行事件數據分析。 

    一下的實例都是以SQLServer 2012版進行,為了使用SSMS中的擴展事件,首先在對象瀏覽器中打開Management | Extended Events,在打開Sessions ,看到當前實例的會話時間的列表。打開後你能看到內置的兩個擴展事件,AlwaysOn_health and system_health

   

image

圖1

 

    需要註意,擴展時間的優點之一就是事件會話保存於伺服器的元數據中,因此預設重啟後保存在實例中,然而追蹤定義則不是,在重啟後必須要執行一個自定義的存儲過程來重新創建追蹤。擴展事件很好的解決了這些繁瑣的配置。  

    首先,當我們建好擴展事件以後可以選擇會話—>編寫會話腳本—>Create 到—>新建查詢編輯視窗,得到擴展時間的創建語句。這個語句是與以前我們自己編寫的腳本略有不同的。

    其次,SQLServer 包含一個with腳本結尾的一些會話級別的選項。這些選項都是預設的。

CREATE EVENT SESSION [XE_ReadsFilter_Trace] ON SERVER
ADD EVENT sqlserver.rpc_completed (
    ACTION ( sqlserver.client_app_name
    , sqlserver.database_id
    , sqlserver.server_instance_name
    , sqlserver.session_id
   )
    WHERE 
   ( logical_reads >= 10000 ) ),
ADD EVENT sqlserver.sql_statement_completed (
    ACTION ( sqlserver.client_app_name
    , sqlserver.database_id
    , sqlserver.server_instance_name
    , sqlserver.session_id
   )
    WHERE 
   ( logical_reads >= 10000 ) )
ADD TARGET package0.event_file (  SET filename = 'C:\temp\XE_ReadsFilter_Trace.xel' ,
                                  max_file_size = ( 5 ) ,
                                  max_rollover_files = ( 1 ) )
WITH (  MAX_MEMORY = 4096 KB ,
        EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS ,
        MAX_DISPATCH_LATENCY = 30 SECONDS ,
        MAX_EVENT_SIZE = 0 KB ,
        MEMORY_PARTITION_MODE = NONE ,
        TRACK_CAUSALITY = OFF ,
        STARTUP_STATE = OFF )
GO

  

代碼1

    我們使用UI創建一個新的事件會話,行為和屬性,在過程的結束,又將構建這個擴展事件的語句輸出了出來。

在UI創建一個新的事件會話

    既可以使用新建會話嚮導或者新建會話。但是,嚮導可選項比較少,因此不推薦使用。所以我們重點介紹新建會話。

    創建新的擴展事件,只需要郵件會話的文件夾,然後選擇新建會話…對話框有四個屬性頁:常規,事件,數據存儲和高級。

image

常規頁

    在常規頁,我們可以輸入事件名稱,並且開啟一些選項。這裡我輸入 HighReadQueries 作為名稱,要求名稱必須唯一 。image

圖2.常規頁

事件頁

  下一步就是加一些事件,切換到事件頁,選擇我們選擇我們打算追蹤的事件並且配置他們。設定合適的操作和謂詞。

添加事件

   為了創建一個事件會話,一定要至少有一個事件。下麵例子中,加入了兩個事件,sqlserver.sql_statement_completedsqlserver.rpc_completed。這裡可以搜索到所有的事件庫,很多我們已經忘記的。在這個分析器中總共有180個時間供你選擇,找到需要的。下麵再事件庫下麵的輸入框中輸入completed ,下麵的對話框自動將包含這個單詞的事件篩選出來少於15個的事件。

圖3

    註意類別/通道這兩個事件的列,基於關鍵字和通道的分類系統,被windows事件追蹤所使用。這裡不深入講解了,理解就行。

    雙擊要選中的兩個事件,然後它們出現在右側的列表中:然後點擊配置按鈕,添加動作和謂詞。

圖4

配置事件

事件配置選項由三個tab組成,全局欄位,過濾和事件欄位。

預設收集(事件欄位)

事件欄位標簽展示事件所有列欄位,構成事件的預設收集欄位,有些開銷較大的欄位是可選收集與否的,如下圖的data_stream…

圖5

    不同的事件有不同的預設捕捉事件數據。

添加操作

    下麵我們可以在全局欄位tab中為兩個事件添加需要的操作。操作也被稱為全局欄位,因為這些欄位不特指任何獨立事件,是公用的。

   為了加上操作,只需要選中選擇框。也可以把一個操作加到多個事件上,高亮兩個事件,然後選中操作即可。這裡我們把client_app_name, database_id, server_instance_name, 和session_id 加到這兩個事件上。

圖6

    上述操作是普遍良性的。而擴展事件也提供額一下副作用的操作。例如debug_break欄位就會引起調試中斷。

設定過濾

    最後,選擇過濾tab來配置任意謂詞。為了縮短事件估計,阻止擴展事件引擎收集沒必要的數據,需要配置一個謂詞來過濾事件數據。謂詞配置和縮短邏輯是極其重要的。

    例如,選中兩個事件,然後從下拉列表選擇logical_reads(邏輯讀),改變操作符列為>=,然後輸入10000。在這種配置下,我們的會話僅僅捕捉sqlstatement 或者存儲過程執行超過時10000的邏輯讀的事件。

圖7

    這種選擇多個功能,加入相同的謂詞給兩個事件,限制了可利用的全局欄位和倆個事件的普通欄位。根據時間的選擇,不是所有的欄位都可以使用。例如,加入我們加入error_reported event事件,那麼選擇這三個事件時,邏輯讀這個謂詞就不能使用了。如下圖

圖8

    在這個例子中,我們配置相同的謂詞給兩個事件,但是我們也可以靈活的配置每一個事件。

    此刻,我們可以選擇OK來創建事件會話完成會話,因為滿足了最低要求。定義事件會話的目標是非必要的。例如,我們配置error_reported 事件加入create_dump_single_thread操作,沒必要保存抓取數據。下麵我們將介紹如何定義目標文件。

數據存儲頁:定義目標文件

    選擇數據存儲也然後目標下麵選擇類型,選擇event_file。接著下麵輸入文件名,選擇瀏覽輸入文件的輸出位置。路徑的最大長度是260個字元。例子中使用的是D:\temp\HighReadQueries。這裡不需要包含文件的預設擴展名.xel。擴展事件引擎會附_0_和一個整性數字(文件創建時間到1600年1月1日的秒的數字)來作為文件結尾,保證文件名是唯一的。該文件類型提供了選項來設置最大文件的值,並且允許多次反覆使用文件。如果沒有指定文件最大值,則文件將會增長至填滿驅動為止。

圖9

高級會話選項

    在高級選項頁面,能看到額外的高級的會話選項。這裡我們可以今後討論,這裡保持預設即可。

事件會話DDL

    選擇OK來完成會話,然後這個會話出現在擴展事件->會話的文件夾下,然後發現他是激活的,因為我們在一開始我們選擇了可選框—創建會話後立即開啟事件會話。生成T-SQL腳本,選擇腳本按鈕點擊OK或者創建完成後右鍵輸出創建腳本到查詢視窗(之前介紹了)。這裡我加上了相應的註釋,以便理解。

/*Create the session, named as specified on the General page*/
CREATE EVENT SESSION [HighReadQueries] ON SERVER

/*Add and configure events, actions and predicates, as specified on the Events page*/
ADD EVENT sqlserver.rpc_completed (  
    ACTION ( sqlserver.client_app_name,
      sqlserver.database_id,
      sqlserver.server_instance_name,
      sqlserver.session_id )
    WHERE ( [logical_reads] >= ( 10000 ) ) ),
ADD EVENT sqlserver.sql_statement_completed (  
    ACTION ( sqlserver.client_app_name,
      sqlserver.database_id,
      sqlserver.server_instance_name,
      sqlserver.session_id )
    WHERE ( [logical_reads] >= ( 10000 ) ) )

/*Add and configure a target, as specified on the Data Storage page*/
ADD TARGET package0.event_file ( SET filename = N'C:\temp\HighReadQueries' )

/* Set Session-level options, specified on the General and Advanced pages*/
WITH ( MAX_MEMORY = 4096 KB ,
        EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS ,
        MAX_DISPATCH_LATENCY = 30 SECONDS ,
        MAX_EVENT_SIZE = 0 KB ,
        MEMORY_PARTITION_MODE = NONE ,
        TRACK_CAUSALITY = OFF ,
        STARTUP_STATE = ON );
GO

  

代碼2

與我們之前的代碼很像。除了有會話立即開始,我們還選擇了”捕獲實時在屏幕上監視數據“。一個新的視窗被打開來顯示被事件會話捕捉的數據,就像Profiler做的一樣。但是不同的時,當觀察實時數據引起系統性能問題時,監視器將會自動關閉。

總結

    完成後,我們已經熟悉了擴展事件,比如創建基本會話,捕捉一個或者多個事件信息,收集操作的數量,使用簡單的謂詞,寫入文件等等。可視化操作大大減輕了腳本的難度,也提供了很多基礎信息的選擇,大大方便了擴展事件的開發。這塊只是開始應用,希望有大神能指點一下。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Masonry是iOS在控制項佈局中經常使用的一個輕量級框架,Masonry讓NSLayoutConstraint使用起來更為簡潔。Masonry簡化了NSLayoutConstraint的使用方式,讓我們可以以鏈式的方式為我們的控制項指定約束。本篇博客的主題不是教你如何去使用Masonry框架的,而是 ...
  • 最近在做一個Android的新聞客戶端,感覺收穫頗豐。 這裡分享一下Volley獲取網路數據的方法 Volley是Google I/O 2013推出的網路通信庫,它的拓展性很強,使用它能使代碼變得更健壯,Volley在提供了高性能網路通訊功能的同時,對網路圖片載入也提供了良好的支持 下麵主要介紹一下 ...
  • 一、通過Java代碼 在setContentView之前執行: 二、調用Android自帶的Theme 直接在AndroidManifest.xml中需要全屏顯示的Activity屬性中添加 三、自己定義全屏Theme 在style.xml文件中定義theme(如果沒有style.xml,在res/ ...
  • 本文轉載自:http://www.cnblogs.com/wuyudong/p/5658020.html 新建一個項目,創建一個java類,繼承自Activity 新建一個Android.xml文件:activity_test.xml 這裡需要在清單文件裡面配置一下 TestActivity.jav ...
  • 原文:http://blog.csdn.net/qingye_love/article/details/13772391?utm_source=tuicool&utm_medium=referral http://blog.csdn.net/qingye_love/article/details/1 ...
  • 原文:http://blog.chengbo.net/2012/03/09/onitemclick-return-wrong-position-when-listview-has-headerview.html 當ListView實例addheaderView()或者addFooterView後,再 ...
  • 原文:http://www.cnblogs.com/mengdd/p/3569127.html 通過實例及PopupWindow源碼分析了PopupWindow的使用。文章最後的“補充Case: 彈窗不消失,但是事件向下傳遞”很贊。 不過,源碼已經發生了變化,文章中提到的PopupViewConta ...
  • 原文:http://www.open-open.com/lib/view/open1427852683115.html ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...