实战:sqlserver 2012 扩展事件-XML转换为标准的table格式

/*******

和2008 R2有小区别

*****/

CREATE EVENT SESSION [test] ON SERVER

ADD EVENT sqlserver.sql_statement_completed

(SET collect_statement=(1)

ACTION

(

sqlserver.client_app_name,

sqlserver.client_hostname,

sqlserver.database_id,

sqlserver.database_name,

sqlserver.sql_text,sqlserver.username

)

WHERE ([cpu_time]>(10000))

)

ADD TARGET package0.asynchronous_file_target

(

SET filename=‘s:\monitor\test.xel‘,

metadatafile=‘s:\monitor\test.xem‘

)

WITH

(

MAX_MEMORY=1048576 KB,

STARTUP_STATE=ON

)

GO

--SELECT *, CAST(event_data as XML) AS ‘event_data_XML‘

--FROM sys.fn_xe_file_target_read_file

--(

--‘s:\monitor\test*.xel‘,

-- ‘s:\monitor\test*.xem‘, NULL, NULL

-- );

IF EXISTS ( SELECT  *

FROM    tempdb.dbo.sysobjects

WHERE   id = OBJECT_ID(N‘tempdb..#MyData‘)

AND type = ‘U‘ )

DROP TABLE #MyData

go

CREATE TABLE #MyData

(

database_id INT NOT NULL ,

username NVARCHAR(100) NOT NULL,

client_hostname NVARCHAR(100) NOT NULL,

client_app_name NVARCHAR(100) NOT NULL,

sql_text NVARCHAR(MAX) NOT NULL ,

cpu_time INT NOT NULL

)

go

DECLARE @xmlData XML

DECLARE @xmlString NVARCHAR(MAX)

DECLARE @database_id INT

DECLARE @username NVARCHAR(100)

DECLARE @client_hostname NVARCHAR(100)

DECLARE @client_app_name NVARCHAR(100)

DECLARE @sql_text NVARCHAR(MAX)

DECLARE @cpu_time INT

DECLARE myCur CURSOR READ_ONLY

FOR

SELECT TOP 200 event_data --CAST(event_data AS XML)

FROM sys.fn_xe_file_target_read_file

(‘s:\monitor\test*.xel‘,

‘s:\monitor\test*.xem‘,NULL,NULL)

OPEN myCur

FETCH NEXT FROM myCur INTO @xmlString

WHILE @@FETCH_STATUS = 0

BEGIN

BEGIN TRY

SET @xmlData = CAST(@xmlString AS XML)

--set @cpu = 0

--获取cpu

SET @cpu_time = @xmlData.query(‘//data[@name="cpu_time"]/value‘).value(‘(value)[1]‘,

‘INT‘)

--获取database_id

SET @database_id = @xmlData.query(‘//action[@name="database_id"]/value‘).value(‘(value)[1]‘,

‘INT‘)

--获取username

SET @username = @xmlData.query(‘//action[@name="username"]/value‘).value(‘(value)[1]‘,

‘NVARCHAR(100)‘)

--获取hostname

SET @client_hostname = @xmlData.query(‘//action[@name="client_hostname"]/value‘).value(‘(value)[1]‘,

‘NVARCHAR(100)‘)

--获取client_app_name

SET @client_app_name = @xmlData.query(‘//action[@name="client_app_name"]/value‘).value(‘(value)[1]‘,

‘NVARCHAR(100)‘)

--获取sql_text

SET @sql_text = @xmlData.query(‘//action[@name="sql_text"]/value‘).value(‘(value)[1]‘,

‘NVARCHAR(MAX)‘)

--开始插入数据

INSERT #MyData

( database_id,

sql_text,

username,

client_hostname,

client_app_name,

cpu_time )

VALUES  ( @database_id, -- database_id - int

@sql_text,  -- sql_text - nvarchar(max)

@username,

@client_hostname,

@client_app_name,

@cpu_time

)

END TRY

BEGIN CATCH

END CATCH

FETCH NEXT FROM myCur INTO @xmlString

END

CLOSE myCur

DEALLOCATE myCur

SELECT b.name,a.username,a.client_hostname,A.client_app_name,a.sql_text,a.cpu_time FROM #MyData AS a

inner join sys.databases as b

on a.database_id=b.database_id

order by a.cpu_time desc

go

时间: 2024-10-15 09:02:02

实战:sqlserver 2012 扩展事件-XML转换为标准的table格式的相关文章

实战:sqlserver 2008 扩展事件-XML转换为标准的table格式

--如果已经存在Event Session删除 IF EXISTS (SELECT * FROM sys.server_event_sessions WHERE name='MonitorLongQuery') DROP EVENT SESSION MonitorLongQuery ON SERVER GO --创建Extended Event session CREATE EVENT SESSION MonitorLongQuery ON SERVER --增加Event(SQL完成事件) A

SQLServer中使用扩展事件获取Session级别的等待信息以及SQLServer 2016中Session级别等待信息的增强

本文出处:http://www.cnblogs.com/wy123/p/6835939.html 什么是等待 简单说明一下什么是等待:当应用程序对SQL Server发起一个Session请求的时候,这个Session请求在数据库中执行的过程中会申请其所需要的资源,比如可能会申请内存资源,表上的锁资源,物理IO资源,网络资源等等,如果当前Session运行过程中需要申请的某些资源无法立即得到满足,就会产生等待.SQL Server会以不用的方式来展现这个等待信息,比活动Session的等待信息,

SQL Server扩展事件的使用ring_buffer target时“丢失”事件的原因分析以及ring_buffer target潜在的问题

事情起因: 排查SQL Server上的死锁问题,一开始想到的就是扩展事件, 第一种方案,开profile守株待兔吧,显得太low了,至于profile的变种trace吧,垂垂老矣,也一直没怎么用过. 第二种方案是开启TRACEON(DBCC TRACEON (3605,1204,1222,-1))将死锁写入error log,也是个不错的选择. 不过想到系统默认的扩展事件sysem_health已经捕获了死锁信息(sqlserver.xml_deadlock_report), 就没必要再重新往

SQL Server扩展事件(Extended Events)-- 使用扩展事件跟踪监控死锁

SQL Server扩展事件(Extended Events)-- 使用扩展事件跟踪监控死锁 我们通过SQL Server 2012图形界面来部署一个扩展事件跟踪会话.然后可以生成SQL脚本,在2008或2008 R2版本下运行类似的跟踪. 步骤1: 通过"Object Explorer"连接到实例,展开"Management"."Extended Events"."Sessions". 步骤2: 右键点击"Sess

SQL Server 扩展事件(Extented Events)从入门到进阶(4)——扩展事件引擎——基本概念

本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列 在第一二节中,我们创建了一些简单的.类似典型SQL Trace的扩展事件会话.在此过程中,介绍了很多扩展事件基础组件,包括事件.谓词.操作和目标.本节,将对扩展事件引擎.架构和基本组件做更加深入的了解.通过这些讲解,可以大概了解到为什么扩展事件相对于SQL Trace来说更加低开销.另外,还会延时如何设计事件会话从而最小化事件收集过程中的不必要开销,即使这些事件会话会很复杂. 事件数据收集生命周期: 扩

SQL Server扩展事件(Extended Events)-- 使用system_health默认跟踪会话监控死锁

SQL Server扩展事件(Extended Events)-- 使用system_health默认跟踪会话监控死锁 自SQL Server 2008以后,提供了扩展事件(Extended Events)来跟踪系统分析定位问题.默认的system_health会话一直在运行,可以帮助你更快的定位问题. 运行如下脚本可以看到system_health扩展事件会话: SELECT * FROM sys.dm_xe_sessions 即便是你没有启动任何扩展事件会话,这个查询也会返回一行system

SQL Server扩展事件-- 使用system_health默认跟踪会话监控死锁

SQL Server扩展事件(Extended Events)-- 使用system_health默认跟踪会话监控死锁 转自:http://blog.51cto.com/ultrasql/1600372 自SQL Server 2008以后,提供了扩展事件(Extended Events)来跟踪系统分析定位问题.默认的system_health会话一直在运行,可以帮助你更快的定位问题. 运行如下脚本可以看到system_health扩展事件会话: SELECT * FROM sys.dm_xe_

SQL 扩展事件

在本篇,我通过使用新建“Session ”对话框来创建新的扩展事件会话.定义一个自己的扩展事件,动作和谓词,并且发布一个以收集事件数据为目的的会话. 首先从UI开始 在SQLServer2008R2以后(不包括2008R2),才引入扩展事件的内置UI.2008的版本可以通过安装插件的形式或者使用T-sql语句来实现扩展事件.如果是2012以后的SSMS客户端,也可以访问2008 的数据库实例,但是看不到扩展事件UI.在2008版本中缺少UI,意味着必须写T-SQL和XQuery来挖掘事件数据.2

SQL Server扩展事件(Extended Events)-- 使用扩展事件跟踪查询语句

SQL Server扩展事件(Extended Events)-- 使用扩展事件跟踪查询语句 创建扩展事件会话 展开"Object Explorer"."Management"."Extended Events"."Sessions"目录,你会发现一到两个预设的会话.默认,在SQL Server 2012包含system_health会话,而根据不同的SQL Server2012的版本,可能有AlwaysOn_health会话