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

在前面一篇博文里我们介绍了如何使用扩展事件(XEvent)在Denali CTP3里的新UI创建和修改XEvent session,本文我们将介绍如何用新UI来显示和分析数据,我们将试图找到一个workload中平均开销最大的query。

在Object Explorer里右键点击前文创建的blogtest session,选择Watch Live Data,如图1所示,这将在SSMS里打开一个新的Live Data窗口,这时我们可以执行我们的workload,workload可以是应用程序的运行,也可以是一段SQL的执行,或者重播Profiler记录的SQL Trace,这里我们在SSMS的另一个窗口执行创建Northwind数据库的instnwnd.sql来模拟一个workload。

image

图1 启动Live Data窗口

当instnwnd.sql执行完毕后,先前打开的Live Data窗口会出现很多行数据,这些就是blogtest session所记录的sql_statement_starting和sql_statement_completed事件,这时可以点击工具栏上的Stop Data Feed按钮(工具栏第二个按钮),这样可以避免和workload无关的事件继续被Live Data窗口显示,如图2 所示。

image

图2 Live Data窗口

你的Live Data窗口可能只有2个列,name和timestamp,这是仅有的2个所有扩展事件共有的列,你可以选择工具栏上的Choose Columns…按钮添加/删除需要显示的列,我增加了3个列database_name,duration和statement,如图3所示。

image

图3 选择列

我们要找到Northwind数据库里平均执行时间最长的query,首先我们可以过滤不必要的事件,前文曾提到过Predicate可以在SQL Server端避免不需要的事件被产生,我们同时也支持客户端的过滤器,这可以帮助你做各种分析。点击工具栏上的Filters…按钮,这将打开Filters对话框,这里我们设置两个条件name=sql_statement_completed And database_name=Northwind,如图4所示。为了避免输入错误,你可以从事件列表里拷贝粘帖,你还可以右键点击某个Cell然后选择Filter by this Value,这将自动为你添加一个子句并And到原有条件上。

image

图4 Filter对话框

过滤掉不必要的事件后我们按照statement来做分组,点击工具栏上的Grouping…按钮,把statement移动到右边,点击OK,如图5所示。

image

图5 Grouping对话框

分组的目的是为了计算每个分组上duration的平均值,下面可以点击工具栏上的Aggregation…按钮,我们在duration上选择AVG,然后选择在duration(AVG)上按降序排序,如图6所示。

image

图6 Aggregation对话框

这样duration平均值最大的分组将被显示在第一行,我执行instnwnd.sql的workload里duration最大的分组是INSERT "Order Details" VALUES(10444,17,31.2,10,0),它的duration是134206微秒,如图7所示。这样我们就找到了平均开销最大的query。

image

图7 开销最大的query

前文在创建blogtest session时增加了event_file的target,如果你打开SQL Server所在机器的Log目录(比如C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log),你会发现一堆blogtest*.xel,你可以双击任何一个文件在SSMS里打开和Live Data类似的窗口,也可以通过SSMS的File|Open|Merge Extended Event Files…菜单在同一窗口里打开多个文件,后面的数据分析和Live Data窗口是一样的。

软件开发工程师 徐进