SQL Server 扩展事件(Extented Events)从入门到进阶(2)——在GUI中创建基础扩展事件
本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列
第一篇文章中提到了如何在Profiler中创建跟踪(trace),并以服务器端(server-side)跟踪方式运行以便在服务器上创建实际跟踪文件。接着把跟踪定义转换到扩展事件的CREATE EVENT SESSION脚本中。
上一篇文章可以成为你从SQL Trace通往扩展事件(Extented Events/xEvents,为后续编写方便,本人尽可能使用xEvents替代扩展事件)的桥梁。同时,上文也从中展示了如何把现有的跟踪库转成xEvents。
但是你应该如何从零开始创建一个新的xEvents?当然T-SQL完全可以实现。虽然从SQL 2008开始引入xEvents,但是真正集成到SSMS(即GUI)中还是从SQL 2012开始,所以如果你要在2008中使用,只能使用T-SQL。从SQL 2012开始,就可以使用GUI来实现。作为扩展事件入门的切入点,从SSMS开始是不错的选择,也正是本文的目的所在。
本节会通过GUI界面,创建一个新的事件会话(event session),并对其定义、启用、筛选和建立会话目标从而实现数据收集。
从GUI开始:
在SQL Server 2008/2008 R2中,没有xEvents的GUI界面可供使用,如果你正在使用这些版本又希望使用扩展事件,那么要么使用T-SQL操作,要么就在SQL 2012的SSMS中进行(无论是SSMS 2012直连2008实例还是在2012中建好然后把脚本在2008实例中执行)。
本系列中,推荐使用SQL 2012及以上版本。当你在SSMS中使用扩展事件时,可以通过下图所示展开:
正如在上一文中提到过,xEvents的其中一个优势是事件会话定义存储在服务器的元数据中,即使重启也会默认启动,而trace却需要手动或者经过某些配置来实现,比如在重启后自动运行某些自定义存储过程来启动跟踪。另外我们也可以有多个事件会话,但是不启用。虽然trace也能实现,但是因为trace的输出文件需要硬编码到定义中,而且如果我们停止跟踪重新启动的话,要确保输出文件名不存在,或者配置跟踪定义允许其滚动使用同一个文件。而xEvents解决了这个问题,在本文后续部分会介绍。
右键上图的“XE_ReadsFilter_Trace”会话,然后按下图选择,把会话定义显示在新建窗口中,这段代码有第一篇中的sp_SQLskills_ConvertTraceToExtendedEvents存储过程生成,但是对比两部分的代码可以看到一些细节差异。首先,SQL Server中存储的代码不在包含注释。
其次,SQL Server产生的代码最下方WITH子句中包含了一系列服务器级别选项,将在下一节介绍。这些选项都是默认项,而第一篇中的脚本不包含这部分。
生成脚本:
CREATE EVENT SESSION [XE_ReadsFilter_Trace] ON SERVER
ADD EVENT sqlserver.rpc_completed (
ACTION ( sqlserver.client_app_name
, sqlserver.database_id
, sqlserver.server_instance_name
, sqlserver.session_id
)
WHERE
( logical_reads >= 10000 ) ),
ADD EVENT sqlserver.sql_statement_completed (
ACTION ( sqlserver.client_app_name
, sqlserver.database_id
, sqlserver.server_instance_name
, sqlserver.session_id
)
WHERE
( logical_reads >= 10000 ) )
ADD TARGET package0.event_file ( SET filename = 'D:\temp\XE_ReadsFilter_Trace.xel' ,
max_file_size = ( 5 ) ,
max_rollover_files = ( 1 ) )
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 = OFF ,
STARTUP_STATE = OFF )
GO
接下来,我们使用GUI来创建一个相同的事件会话,但是为了避免重名冲突,会使用另外一名字,然后使用SQL Server生成的脚本对比两者的区别。
在GUI中创建新的事件会话:
常规页:
事件页:
添加事件:
通过界面创建会话时,必须添加最少一个事件。比如,我们想添加两个事件:sqlserver.sql_statement_completed和sqlserver.rpc_completed。我挺喜欢这个界面的搜索功能。如果单纯使用滚动条,可能会耗费数分钟、数小时数天等等。因为里面有包含在Profiler中的180个事件,从中找一个你需要的是非常痛苦的事情。通过搜索,可以很快定位。
比如在“事件库”中输入“completed”,然后自动会触发搜索,从数百个事件中筛选出少于15个:
注意【类别/通道】两列,这是基于Windows事件跟踪(Event Tracing for Windows,ETW)分类系统的。这部分在后续章节介绍。
但是这里没有显示所有“_completed”事件,因为默认情况下,GUI不现实debug通道事件。你可以展开【通道】列的箭头,会发现debug是没选中的,如图:
如果勾选这个debug项,你可以发现多了几个事件。debug 事件的目的是给微软内部使用。也可以给数据库专家在进行深入Troubleshooting时使用,或者用来深入研究SQL Server内部特性时使用。但是基于其目的,微软不支持非内部人员这样使用,也不确保提供这种功能,同时可能会在后续版本中移除。
双击【所选事件】中的任意一个,界面就会平移到配置项,或者单击事件名然后点下图红圈中的按钮。这个配置页用于添加对应事件的操作和限定谓词。
这部分是作者唯一不喜欢的GUI功能,因为配置不能在同一个窗体内完成,需要平移。
配置事件:
在这两个事件中切换时可以看到不同的事件的默认负载略有不同。并且绝大部分不能移除。通过复选框可以控制是否收集。比如rpc_completed事件的statement部分是可以不收集的,但默认会收集,而output_parameters列是可选但默认不收集。这里我们不改动任何默认设置。
添加操作:
上面这四个操作很轻量级,只是对事件添加一些明细信息。但是扩展事件也提供了一些有副作用的操作,称为“副作用操作”(side-effecting actions)。比如,debug_break操作会在事件触发时引发一个debug断点,另外“create_dump_all_threads”、“create_dump_single_thread”会触发SQL Server记录下所有或者正在运行的线程的内存使用情况。由于引擎在同一个线程中执行这些操作,所以这些操作会降低性能,需要谨慎使用。这部分在下文介绍。
设置筛选条件(谓词):
最后,我们通过【筛选器(谓词)】页配置筛选条件。除了少数特殊情况之外,都应该对每个事件配置筛选条件,以便实现“短路(short-circuit)”事件评估,并且避免扩展事件引擎收集不必要的数据从而增大整体开销。筛选配置和短路逻辑极其重要,下节会做详细介绍。
在本例中,高亮所有事件,然后在【字段】列的下拉框中选择【logical_reads】,【运算符】列选择【>=】,【值】列输入100000,通过这些配置,事件会话只会收集超过10000逻辑读的SQL语句或者存储过程:
这里是对所有事件进行指定筛选条件,使得全局通用的筛选都能应用于多个事件中。但是根据事件的不同,并不是所有的字段都是可用的。比如如果添加了error_reported事件,并且选择了三个事件,那么就看不到“logical_reads”这个操作符,甚至你会发现完全不可选:
在这个例子中,对两个事件添加了相同的谓词,但是我们也可以对每个事件单独配置,这一点在SQL Trace中是不可能的。
在配置完之后,点击【确定】来创建事件会话。因为已经添加了最少一个事件,已经满足了最低要求。在这里并不强制定义事件会话的目标。这种免选择对一些事件来说是合理的。比如配置带有create_dump_single_thread这种副作用操作的error_reported事件,就没有必要非要指定目标,我们想要的数据(一个文件)将在特定错误发生时会创建。
由于本例中我们只是配置针对会话的目标,所以对数据存储非必要。但是下面还是介绍一下。
数据存储页:定义目标
高级会话选项:
事件会话DDL:
/*Create the session, named as specified on the General page*/
CREATE EVENT SESSION [HighReadQueries] ON SERVER
/*Add and configure events, actions and predicates, as specified on the Events page*/
ADD EVENT sqlserver.rpc_completed (
ACTION ( sqlserver.client_app_name,
sqlserver.database_id,
sqlserver.server_instance_name,
sqlserver.session_id )
WHERE ( [logical_reads] >= ( 100000 ) ) ),
ADD EVENT sqlserver.sql_statement_completed (
ACTION ( sqlserver.client_app_name,
sqlserver.database_id,
sqlserver.server_instance_name,
sqlserver.session_id )
WHERE ( [logical_reads] >= ( 100000) ) )
/*Add and configure a target, as specified on the Data Storage page*/
ADD TARGET package0.event_file ( SET filename = N'D:\temp\HighReadQueries' )
/* Set Session-level options, specified on the General and Advanced pages*/
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 = OFF ,
STARTUP_STATE = ON );
GO
总结:
SQL Server 扩展事件(Extented Events)从入门到进阶(2)——在GUI中创建基础扩展事件的更多相关文章
- 在 Visual Studio 2010 中创建 SharePoint 2010 事件接收器
Microsoft Visual Studio 2010 提供了一个可用于生成事件接收器的项目类型,事件接收器会在 Microsoft SharePoint 2010 网站上选择事件之前或之后执行操作 ...
- 【转】SQL Server -- 已成功与服务器建立连接,但是在登录过程中发生错误
SQL Server -- 已成功与服务器建立连接,但是在登录过程中发生错误 最近在VS2013上连接远程数据库时,突然连接不上,在跑MSTest下跑的时候,QTAgent32 crash.换成IIS ...
- SQL Server Extended Events 进阶 2:使用UI创建基本的事件会话
第一阶中我们描述了如何在Profiler中自定义一个Trace,并且让它运行在服务器端来创建一个Trace文件.然后我们通过Jonathan Kehayias的 sp_SQLskills_Conver ...
- SQL Server(MSSQLSERVER) 请求失败或服务未及时响应,有关详细信息,请参见事件日志或其他的适用的错误日志。
转自:https://www.fengjunzi.com/blog-25573.html 问题 有时候sqlserver无法启动了,原因是mssqlserver服务没有启动,当你手动启动时,又出现服务 ...
- SQL Server 2012附加数据库时,错误提示如下:尝试打开或创建物理时,CREATE FILE 遇到操作系统错误 5(拒绝访问。)
错误提示:Create File遇到操作系统错误5(拒绝访问) 解决方案: 在所有程序-SQL Server 2012-"SQL Server 配置管理器",点击"SQL ...
- EntityFramework_MVC4中EF5 新手入门教程之四 ---4.在EF中创建更复杂的数据模型
在以前的教程你曾与一个简单的数据模型,由三个实体组成.在本教程中,您将添加更多的实体和关系,并通过指定格式. 验证和数据库映射规则,您将自定义数据模型.你会看到自定义的数据模型的两种方式: 通过添加属 ...
- SQL SERVER 2008:内部查询处理器错误: 查询处理器在执行过程中遇到意外错误
今天一个同事突然告诉我,以前跑得很正常的一个SQL语句,执行时突然报如下错误: 消息1222,级别16,状态18,第1 行 已超过了锁请求超时时段. ...
- SQL Server 扩展事件(Extented Events)从入门到进阶(1)——从SQL Trace到Extented Events
由于工作需要,决定深入研究SQL Server的扩展事件(Extended Events/xEvents),经过资料搜索,发现国外大牛的系列文章,作为“学习”阶段,我先翻译这系列文章,后续在工作中的心 ...
- SQL Server中的扩展事件学习系列
SQL Server 扩展事件(Extented Events)从入门到进阶(1)——从SQL Trace到Extented Events SQL Server 扩展事件(Extented Event ...
随机推荐
- ES6 new syntax of Rest and Spread Operators
Rest and Spread Operators.md Why we need rest and spread operators? var showCollections = function(i ...
- 获取 Let's Encrypt 免费通配符证书实现Https
说明 3月14日,Let's Encrypt的执行董事Josh Aas对外宣布,他们的通配符证书正式上线,用户可以基于此特性轻松部署/开启所有子域名的HTTPS功能. Let's Encrypt 是国 ...
- [LeetCode] Max Chunks To Make Sorted 可排序的最大块数
Given an array arr that is a permutation of [0, 1, ..., arr.length - 1], we split the array into som ...
- Java中对象比较的方法
class Person{ private String name; private int age; public Person(String name,int age){ this.name = ...
- 【bzoj4570 scoi2016】妖怪
题目描述 邱老师是妖怪爱好者,他有n只妖怪,每只妖怪有攻击力atk和防御力dnf两种属性.邱老师立志成为妖怪大师,于是他从真新镇出发,踏上未知的旅途,见识不同的风景. 环境对妖怪的战斗力有很大影响,在 ...
- 使用word
同样这也是生活中常用到的办公软件,word本质是一个排版软件,它与一般的编辑器不同的是,它将整个文本分成了一页一页的,当然这也是方便于打印文档. 使用word还是很容易的,一般来说需要注意以下几方面的 ...
- Android智能手机中各种音频场景下的audio data path
上一篇文章(Android智能手机上的音频浅析)说本篇将详细讲解Android智能手机中各种音频场景下的音频数据流向,现在我们就开始.智能手机中音频的主要场景有音频播放.音频录制.语音通信等.不同场景 ...
- Linux学习之CentOS(二十)------vi/vim 按键说明
vi/vim 按键说明 除了上面简易范例的 i, Esc, :wq 之外,其实 vim 还有非常多的按键可以使用. 第一部份:一般模式可用的光标移动.复制粘贴.搜索替换等 移动光标的方法 h 或 向左 ...
- ubuntu + 远程桌面连接命令 + rdesktop + 连接windows或者ubuntu远程桌面
原文 https://www.cnblogs.com/xiaouisme/p/5166469.html sudo apt-get install rdesktop rdesktop 124.42.12 ...
- UMAIL安装教程
UMAIL安装教程 一.UMAIL虚拟机的创建与安装 首先在VM中选择新建虚拟机 选择下一步 选择稍后安装操作系统 选择Linux系统 版本CentOS 7 64位 选择名称与安装位置 选择下一步 选 ...