利用扩展事件(Xevents)捕捉高消耗查询
生产环境中有时需要使用者抓取一些特定的语句分析,如超超长查询,或高IO查询等.一般来说大家对跟踪比较熟悉,主要因为其有完善的UI支持.由于扩展事件在sql2012才提供UI支持,所以虽然在08时就已经存在的更轻量级的扩展事件没有被广泛使用.这里和大家分享一个扩展事件脚本,用来捕捉高消耗的查询语句.
注意:使用完毕后应停止扩展事件捕捉.
应根据自身实际需求设置过滤条件,如CPU,duration,Reads等
在sql2012中会提供更为丰富的内容(如query_hash等)
code 1 将扩展事件追踪保存到本地文件中
CREATE EVENT SESSION L_QUERIES ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.username,sqlserver.client_hostname,sqlserver.database_id,sqlserver.session_id,sqlserver.sql_text,sqlserver.plan_handle)
WHERE (cpu>1000 AND duration>=5000000 and Reads>=10000 and sqlserver.database_id=17))
ADD TARGET package0.asynchronous_file_target
(SET FILENAME = N'D:\L_QUERIES.xel', METADATAFILE = N'D:\L_QUERIES.xem')
WITH (max_dispatch_latency = 1 seconds);
--cpu 1s
--duration 5s
--reads io 10000
--database_id 17 if you do not need it ,cut out
GO ALTER EVENT SESSION L_QUERIES ON SERVER STATE = START;------start the event
GO SELECT
data.value (
'(/event[@name=''sql_statement_completed'']/@timestamp)[1]', 'DATETIME') AS [Time],
data.value (
'(/event/data[@name=''cpu'']/value)[1]', 'INT') AS [CPU (ms)],
data.value (
'(/event/data[@name=''reads'']/value)[1]', 'BIGINT') AS [Reads],
data.value (
'(/event/action[@name=''session_id'']/value)[1]', 'smallint') AS [session_id],
data.value (
'(/event/action[@name=''database_id'']/value)[1]', 'smallint') AS [database_id],
CONVERT (FLOAT, data.value ('(/event/data[@name=''duration'']/value)[1]', 'BIGINT')) / 1000000
AS [Duration (s)],
data.value (
'(/event/action[@name=''username'']/value)[1]', 'VARCHAR(100)') AS [username],
data.value (
'(/event/action[@name=''client_hostname'']/value)[1]', 'VARCHAR(100)') AS [client_hostname],
data.value (
'(/event/action[@name=''sql_text'']/value)[1]', 'VARCHAR(MAX)') AS [SQL Statement],
SUBSTRING (data.value ('(/event/action[@name=''plan_handle'']/value)[1]', 'VARCHAR(100)'), 15, 50)
AS [Plan Handle]
FROM
(SELECT CONVERT (XML, event_data) AS data FROM sys.fn_xe_file_target_read_file
('D:\L_QUERIES*.xel', 'D:\L_QUERIES*.xem', null, null)
) entries
ORDER BY [Time] DESC;----------query the event info what you need --ALTER EVENT SESSION L_QUERIES ON SERVER STATE = STOP;---stop the event --DROP EVENT SESSION L_QUERIES ON SERVER;------------drop the event
code2 将扩展事件保存到ring buffer中
CREATE EVENT SESSION L_QUERIES ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.username,sqlserver.client_hostname,sqlserver.database_id,sqlserver.session_id,sqlserver.sql_text,sqlserver.plan_handle)
WHERE (cpu>1000 AND duration>=5000000 and Reads>=10000 and sqlserver.database_id=17))
ADD TARGET package0.ring_buffer
(SET max_memory = 4000) -----not the default 4096kb
WITH (max_dispatch_latency = 1 seconds)
--cpu 1s
--duration 5s
--reads io 10000
--database_id 17 if you do not need it ,cut out
GO ALTER EVENT SESSION L_QUERIES ON SERVER STATE = START;------start the event
GO DECLARE @target_data XML
SELECT @target_data=CAST(target_data AS XML)
FROM sys.dm_xe_sessions AS s
JOIN sys.dm_xe_session_targets AS t
ON t.event_session_address = s.address
WHERE s.name = 'L_QUERIES'
AND t.target_name = 'ring_buffer' SELECT
t.value('(@timestamp)[1]', 'datetime2') AS [time],
t.value ('(data[@name=''cpu'']/value)[1]', 'INT') AS [CPU (ms)],
t.value ('(data[@name=''reads'']/value)[1]', 'BIGINT') AS [Reads],
t.value ('(action[@name=''session_id'']/value)[1]', 'smallint') AS [session_id],
t.value ('(action[@name=''database_id'']/value)[1]', 'smallint') AS [database_id],
CONVERT (FLOAT, t.value ('(data[@name=''duration'']/value)[1]', 'BIGINT')) / 1000000
AS [Duration (s)],
t.value ('(action[@name=''username'']/value)[1]', 'VARCHAR(100)') AS [username],
t.value ('(action[@name=''client_hostname'']/value)[1]', 'VARCHAR(100)') AS [client_hostname],
t.value ('(action[@name=''sql_text'']/value)[1]', 'VARCHAR(MAX)') AS [SQL Statement],
SUBSTRING (t.value ('(action[@name=''plan_handle'']/value)[1]', 'VARCHAR(100)'), 15, 50)
AS [Plan Handle]
FROM @target_data.nodes('RingBufferTarget/event') AS q(t)
ORDER BY [Time] DESC;----------query the event info what you need --ALTER EVENT SESSION L_QUERIES ON SERVER STATE = STOP;---stop the event --DROP EVENT SESSION L_QUERIES ON SERVER-----------drop the event
利用扩展事件(Xevents)捕捉高消耗查询的更多相关文章
- 利用扩展事件进行调优和Troubleshooting PPT分享
本篇主题是我在2015年中国数据库大会(DTCC)上的分享,扩展事件从2008版本出来到现在已经有6-7年,国内却很少有相关资料和使用,现在分享一下PPT,希望对大家有所帮助. 可 ...
- SQL Server 扩展事件(Extented Events)从入门到进阶(1)——从SQL Trace到Extented Events
由于工作需要,决定深入研究SQL Server的扩展事件(Extended Events/xEvents),经过资料搜索,发现国外大牛的系列文章,作为“学习”阶段,我先翻译这系列文章,后续在工作中的心 ...
- 【监控笔记】【2.3】扩展事件——慢查询SQL(执行超过3S的SQL)
--sql server 2008及以上才支持,2012及以上才支持GUI界面 msdn 扩展事件:点击打开链接 [1]T-SQL实现 基于 rpc_completed(远程过程调用已完成时发生) 事 ...
- 通过SQL Server的扩展事件来跟踪SQL语句在运行时,时间都消耗到哪儿了?
原文:通过SQL Server的扩展事件来跟踪SQL语句在运行时,时间都消耗到哪儿了? 问题就是,一个很简单的语句,在不同的服务器上执行,所需要的时间相差很大,特别提到在性能差的服务器上反而快,在性能 ...
- C++ //多态案例 -计算器类(普通写法 和 多态写法) //利用多态实现计算器 //多态好处: //1.组织结构清晰 //2.可读性强 //3.对于前期和后期扩展以及维护性高
1 //多态案例 -计算器类(普通写法 和 多态写法) 2 3 #include <iostream> 4 #include <string> 5 using namespac ...
- 如果正确读取SQL Server中的扩展事件?
SQL Server中使用扩展事件捕捉所需的信息后,可以选择存放的位置.比如说内存或文件中,但无论存在哪里,其本质都是一个大XML.因此在SQL Server中读取该XML就是解析扩展事件结果 ...
- SQL 扩展事件
在本篇,我通过使用新建“Session ”对话框来创建新的扩展事件会话.定义一个自己的扩展事件,动作和谓词,并且发布一个以收集事件数据为目的的会话. 首先从UI开始 在SQLServer2008R2以 ...
- SQL Server 扩展事件(Extented Events)从入门到进阶(4)——扩展事件引擎——基本概念
本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列 在第一二节中,我们创建了一些简单的.类似典型SQL Trace的扩展事件会话.在此过程中,介绍了很多扩展事 ...
- SQLServer中使用扩展事件获取Session级别的等待信息以及SQLServer 2016中Session级别等待信息的增强
本文出处:http://www.cnblogs.com/wy123/p/6835939.html 什么是等待 简单说明一下什么是等待:当应用程序对SQL Server发起一个Session请求的时候, ...
随机推荐
- JSON之Asp.net MVC C#对象转JSON,DataTable转JSON,List转JSON,JSON转List,JSON转C#对象
一.JSON解析与字符串化 JSON.stringify() 序列化对象.数组或原始值 语法:JSON.stringify(o,filter,indent) o,要转换成JSON的对象.数组或原始值 ...
- 5.Firedac错误信息
主要错误信息属性: 1.EFDDBEngineException Errors -- TFDDBError对象集合. ErrorCount --错误的记录数 Kind -- DBMS的错误集合. Me ...
- C# .net ACCESS 网页增删改查 --留言板
话不多说,上代码 http://yunpan.cn/QaQs5Dzz8ZIxK 访问密码 041b
- linux在yum下安装mysql
1:查看软件是否安装 yum list installed | grep mysql 2:卸载CentOS系统自带mysql数据库 yum -y remove mysql-libs.x86_64,若有 ...
- 2016年 Delphi Roadmap
2016年delphi Roadmap 发布,这也是新公司的第一次发布路线图. 虽然稍微晚点( 原来说是1月份发布路线图),至少比过去积极点.喧嚣多年的靴子终于落地. Linux 的支持终于正式公布. ...
- {C#}{GDI+}各种C#,GDI+的资料
GDI+各种功能: http://www.cnblogs.com/08shiyan/category/253906.html 字体:http://blog.sina.com.cn/s/blog_7c7 ...
- kindeditor编辑器的使用
KindEditor是一款用Javascript编写的开源在线HTML编辑器,主要用户是让用户在网站上获得可见即可得的编辑效果,开发人员可以用 KindEditor 把传统的多行文本输入框(texta ...
- 1-11 ICMP协议
ICMP协议 IP不提供可靠的传输服务,也不提供端到端或点到点的确认,如果出错可以通过ICMP报告来看,它在IP模块中实现.TCP/IP协议设计了ICMP就是为了弥补IP协议的不足. 它是TCP/IP ...
- flex4.0密钥及破解方式
输入下面的序列号: 1424-4507-0757-7016-8907-6937 1424-4785-4428-8084-6314-8733 1424-4794-9281-8063-2338-9079 ...
- Appium学习路-打包apk和ipa篇
间隔这么长时间再去写Appium的学习篇是有原因的,因为在想要用appium测试ios时,发现appium只能测试debug版本的ipa包.然后就需要自己去学习打包了啊.然后就对xcode各种不了解, ...