SQL Server 2008新增了一个新的技术:扩展事件(Extended Event)。这个技术为诊断SQL Server故障时捕获内部信息提供了一种全新的方法。SQL Server在未来的版本中将使用扩展事件替代SQL Server Profiler。
SQL Server 2012特地为此提供了一个查看器。下面我们将通过这个扩展事件查看器(Extended Event Profiler)创建一个捕获。
1、创建一个扩展事件捕获
打开SSMS,展开“管理”、“扩展事件”、“会话”。在右键菜单中选择“新建会话向导”。
2、通过向导创建会话
输入会话名称。
使用“查询批处理跟踪”会话模板。
单击“类别”标题栏右侧的下拉按钮,去除“全部”前面的选择,然后选择“Excution”。在左侧列表中选择“rpc_starting”,并将其添加到右侧列表。
选择“sql-text”字段。
依次选择“字段”、“运行符”、“值”标题栏右侧的下拉按钮,添加一个筛选器,把系统事件排除掉。
3、在屏幕上进行监视
将sql_text列添加到显示窗口。
通过扩展事件还可以查看的更详细的事件信息。
4、查看脚本
CREATE EVENT SESSION [TestTrace] ON SERVER ADD EVENT sqlserver.error_reported( ACTION(sqlserver.client_app_name,sqlserver.database_id,sqlserver.query_hash,sqlserver.session_id,sqlserver.sql_text) WHERE ([package0].[greater_than_uint64]([sqlserver].[database_id],(4)) AND [package0].[equal_boolean]([sqlserver].[is_system],(0)) AND [package0].[not_equal_boolean]([sqlserver].[is_system],(1)))), ADD EVENT sqlserver.rpc_completed( ACTION(sqlserver.client_app_name,sqlserver.database_id,sqlserver.query_hash,sqlserver.session_id,sqlserver.sql_text) WHERE ([package0].[greater_than_uint64]([sqlserver].[database_id],(4)) AND [package0].[equal_boolean]([sqlserver].[is_system],(0)) AND [package0].[not_equal_boolean]([sqlserver].[is_system],(1)))), ADD EVENT sqlserver.rpc_starting( ACTION(sqlserver.sql_text) WHERE ([package0].[not_equal_boolean]([sqlserver].[is_system],(1)))), ADD EVENT sqlserver.sql_batch_completed( ACTION(sqlserver.client_app_name,sqlserver.database_id,sqlserver.query_hash,sqlserver.session_id,sqlserver.sql_text) WHERE ([package0].[greater_than_uint64]([sqlserver].[database_id],(4)) AND [package0].[equal_boolean]([sqlserver].[is_system],(0)) AND [package0].[not_equal_boolean]([sqlserver].[is_system],(1)))) ADD TARGET package0.ring_buffer 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=ON,STARTUP_STATE=OFF) GO |
5、停止会话
6、 查看会话的属性
在会话的右键菜单中选择“属性”,查看此会话的属性信息。