扩展事件在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窗口是一样的。

软件开发工程师 徐进

Comments (1)
  1. 请问 可以请教您一个问题么 says:

    一个表中共有记录14条,记录宽度为1024字节。按照单一扩展盘曲和混合扩展盘区两种使用磁盘方式分别估算一个堆结构存储的数据表需占用的磁盘空间。

Comments are closed.

Skip to main content