扩展事件在Denali CTP3里的新UI(一)

去年年底时我曾经写过一篇介绍扩展事件(XEvent)在Denali CTP1里新功能的博文,在CTP1中我们提供了一个Object Model和一个简单的UI,在不久前发布的Denali CTP3里我们对XEvent的UI做了更好的支持,本文将进行介绍。

首先我们提供了一个功能强大的对话框用于创建/修改SQL Server里的XEvent Session,你可以在Object Explorer里右键点击Extended Events下的Sessions节点选择New Session…来新建一个Session,如图1所示。这将打开新建Session对话框,这个对话框有4个页面,分别是General、Events、Data Storage (Targets)、Advanced页面,下面我们一一介绍。

image 

图1 新建Session

第一个General页面里你可以输入Session的名字,选择一些选项,比如Session是否和SQL Server一起启动,Session创建成功后是否立即启动该Session等等。我们支持与Profiler里模板类似的概念,只要选择一个模板,Event(包括Action和Predicate)和Target以及某些选项就自动选择好了,但是在CTP3里只有一个Standard模板,这个模板所选择的事件和Profiler里的Standard模板相对应。你也可以把自己创建的Session作为模板保存起来以备后用,保存模板只需要右键点击某个Session然后选择Export Session…即可。这里我们输入blogtest,并选择”Start the event session immediately after session creation”让blogtest在创建成功后立即启动,如图2所示。

image

图2 General页面

点击左边的Select a page列表里的Events切换到Events页面,这个页面是最复杂的,也是UI能够给你提供最大帮助的地方。你首先看到它分为左右两部分,左边是事件库,所有在SQL Server里注册的扩展事件都列在这里,右边是你选择的事件。在事件的选择上我们做了很多工作来帮助您:1. 你可以点击抬头排序,默认是按事件名排序;2. 可以输入关键字进行过滤,比如图3中我们输入sql_,所有名字含有sql_字样的事件都被列了出来并且高亮显示,过滤可以作用在事件名称上,也可以在事件的名称和描述上,或者事件所含的Fields上,你可以点击事件库右上方的ComboBox切换,所有的过滤都有高亮显示;3. 在Category和Channel上我们实现了和Excel类似的过滤过能,你可以点击Channel右边的下拉箭头选择只看Analytic channel的事件。

找到你需要的事件后,双击它或者点击两部分中间的>按钮加入选择,在这里我们选择了sql_statement_starting和sql_statement_completed事件。你可能注意到了有两个小图标(闪电和漏斗)显示在已选择事件的列表中,下面会介绍。

image

图3 在Events页面里选择事件

点击Events页面右上方的Configure按钮,页面将会滑动,事件库被隐藏,而配置事件的页面将出现,如图4所示,当然你点击Select可以回到刚才的页面。你会看到闪电和漏斗图标分别出现在了右边配置页面的Actions标签和Filter标签上,闪电代表的是该事件上有多少Global Fields(Actions)关联,漏斗代表该事件有没有Filter(Predicate)关联。

Action是指在发生事件的时刻可以读取的环境数据,比如event_sequence可以为所有事件排序,Profiler里每个事件都含有EventSequence列,而在XEvent里则被作为Action来实现了。

Predicate可以减少不必要的事件收集,比如我可以配置sql_statement_starting事件的Predicate为database_name=’Northwind’,那么发生在其他数据库的sql_statement_starting事件就不会被该Session所收集,Profiler可以为所有事件设置一个Column Filter,而XEvent支持为每个Event设置各自独立不同的Predicate,有兴趣可以参考MSDN里扩展事件对Action和Predicate的介绍。Event Fields标签列出所有该Event的列,某些Event会把一些开销比较大的列作为可选的列,你可以点击前面的CheckBox选择是否收集该列数据,比如sql_statement_starting的statement列就可以被取消选择。

你可以同时选择多个Event并选择/取消Action或配置Filter,在这里我们为sql_statement_starting和sql_statement_completed事件选择database_name action,不添加Filter并保持Event Fields默认值。

image

图4 在Events页面里配置事件

第三个页面是Data Storage页面,在这个页面里可以选择为Session添加不同的Target,这里我们选择event_file target并保持默认配置。

image

图5 Data Storage页面

最后一个页面是Advanced页面,这是可以设置控制Session行为的高级选项。有一个选项需要特别注意,”Maximum dispatch latency”,它描述了事件从被触发到写入到Target最长的等待时间,默认值是30秒,如果你使用和Profiler client-side tracing类似的Live Monitoring功能,你可能会希望把它改小,这样事件被触发后可以尽快地显示在SSMS里,但需要注意到是改小它会增加SQL Server的开销,这里我们把它改成5秒。

image

图6 Advanced页面

点击OK,blogtest session将会被创建成功并显示在Object Explorer里,在Session被创建后,你可以在Object Explorer里右键点击该Session并选择Properties,这将打开和创建Session相同的对话框,进行修改后点击OK即可完成。

右键点击blogtest选择”Watch Live Data”,这将打开前面提到的Live Monitoring功能,我们将会在后续的博文里继续介绍它。

软件开发工程师 徐进