Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
我的同事林默2009年曾写了一篇关于SQL Server 2008里扩展事件(XEvent)介绍的博文,XEvent在SQL 2008里所有的操作必须用TSQL来实现,不是非常方便。在上个月刚刚发布的Denali CTP1里我们对XEvent提供了更多的支持,建立了一个Object Model,在其基础上提供了SQL Server Management Studio(SSMS)里的一个简单UI并同时对PowerShell提供了支持。
有了Object Model后,我们就可以用写.NET代码来创建XEvent Session,修改Session或者枚举数据库里的所有Session。我们可以在Visual Studio里新建一个简单的.NET 3.5 Console Application,并增加对Microsoft.SqlServer.ConnectionInfo,Microsoft.SqlServer.Management.Sdk.Sfc以及Microsoft.SqlServer.XEvent的引用。如果你在Add Reference对话框的.NET标签找不到这些Assembly的话,你可以通过Browse标签到C:\Program Files\Microsoft SQL Server\110\SDK\Assemblies目录下添加这些Assembly。在Program.cs里先增加下面几个using:
using System.Data.SqlClient;
using Microsoft.SqlServer.Management.XEvent;
using Microsoft.SqlServer.Management.Sdk.Sfc;
然后在Main函数里输入下面的代码(你可能需要改变Connection String):
using (SqlConnection conn = new SqlConnection("Data Source=.;Integrated Security=True"))
{
conn.Open();
XEStore store = new XEStore(new SqlStoreConnection(conn));
Session session = store.CreateSession("blogtest");
Event evt = session.AddEvent("sqlserver.sql_statement_starting");
evt.AddAction("sqlserver.database_name");
session.AddEvent("sqlserver.sql_statement_completed");
Target target = session.AddTarget(store.RingBufferTargetInfo);
session.MaxDispatchLatency = 5; //change dispatch latency to 5sec (default 30sec)
session.Create();
session.Start();
}
编译然后运行该程序,一个叫blogtest的XEvent Session就被创建并启动起来。我们可以用SSMS来查看这个session,连接到你Connection String里的数据库服务器,在Object Explorer里展开Management节点,Extended Events是我们新加的一个节点,展开两级后可以看到我们刚刚创建的blogtest,如图1所示。
图1 新加的Extended Events节点
右键点击blogtest节点,在菜单(如图2所示)里你可以启动/停止、导入/导出、删除或者Script选中的Session。导入/导出是针对模板,你可以选择任何一个Session导出为模板分享给别人使用,而Script则生成所选Session的创建/删除SQL语句,可以生成到新窗口、文件、剪贴板或者Agent Job。有了导入/导出和Script之后你就可以在模板和SQL语句之间随意转换。
图2 Session节点上的右键菜单
图2菜单里有个Start PowerShell菜单项,这就是我们前面提到的我们对PowerShell支持。点击它将打开一个PowerShell窗口并进入在Session所在的目录。你在PowerShell里同样可以创建/修改或枚举XEvent Session,如图3所示。你也可以尝试将下面的script保存成C:\blog.ps1,然后在PowerShell窗口里输入C:\blog.ps1来执行它(如果执行.ps1文件出现权限的问题可以输入help set-executionpolicy查看帮助)。
cd \XEvent
$h = hostname
cd $h
$store = dir | where {$_.DisplayName -ieq 'default'}
$session = new-object Microsoft.SqlServer.Management.XEvent.Session
-argumentlist $store, "blogtest2"
$session.AddEvent("sqlserver.sql_statement_completed")
$session.Create()
图3 在PowerShell里创建XEvent Session
Denali CTP1里SSMS操作XEvent Session的UI还很简单,在此后的CTP里我们会继续增加其他功能,请继续关心我们的blog。
参考文献
- Introducing SQL Server Extended Events
- What’s new for Extended Events in SQL Server code-named “Denali” CTP1
软件开发工程师 徐进