SQL Server Extended 伊芙nts 进阶 一:从SQL Trace 到Ex

2019-04-20 15:03栏目:程序人生

DECLARE @TraceID INT
DECLARE @maxfilesize BIGINT
SET @maxfilesize=25
DECLARE @tracefile nvarchar(245)
SET @tracefile=N'F:SQLTestTRACEMYTRACE.trc'
EXEC sp_trace_create
@TraceID OUTPUT,
@options=8,
@tracefile=NULL,
@maxfilesize=@maxfilesize
EXEC sp_trace_setstatus @TraceID,1
exec sp_trace_setevent 2,12,1,1
exec sp_trace_setevent 2,13,1,1

二,禁止使用或启用默许追踪

总结

您以后曾经知道什么将SQL Trace 的知识映射到Extended 伊芙nts中了,大家得以行使T-SQL达到大家的目的。大家下一步将详细的看一下DDL, 并且转向Extended 伊芙nts的UI。大家在须臾间阶中解决那一个难题。

将该脚本保存到1个职位,然后大家开荒,笔者顺便将默许的公文路径增添上

**三.死锁案例(201四年二月235日晚补充)**

函数sys.fn_trace_gettable,用于从追踪文件中读取数据,以涉及表的格式显式:

SQL Trace 和Profiler 将不再引进新作用。即便他们为我们熟习,Profiler伴随SQL Server7.0在壹玖九八发行, 以后是时候拥抱Extended 伊夫nt通晓她的效应。

ca888会员登录 1

**@columnid **要为该事件增加的列的 ID

在创制SQL Trace之后,点击File->Export->Scipt Trace Definition,把SQL Server Profiler用于创设SQL Trace的台本代码导出:

设置事件会话选项

终极,在大家的对话定义中,大家还有大多可选的对话配置项,如最大内存大小以及调治延迟。因为大家在剧本中从未点名这么些选拔,由此会动用暗中认可值。会话设置会在下一阶中详尽座谈。
一旦大家再花一分钟回想一下整整Extended 伊夫nts会话定义,你会开掘它足够直观而且对于这几个DDL每一有的的知道不会有任何艰巨。

其八个:表示滚动文件的分寸(单位MB),当达到那一个值就会创建新的轮转文件

 暗许的追踪文件,提供的追踪音讯依然很全的,从中大家得以找到登5位,操作音信等,上边的截图只是包蕴的部分新闻。我们得以应用该语句举行和睦的加工,然后拿走更实用的新闻。

暗中认可追踪有5个追踪文件,每二个文件的最大size私下认可是20MB,SQL Server担任维护那五个公文,当实例重启的时候如故达到文件Size最大值的时候,SQL Server创制新的文件,将最早成立的追踪文件删除,依次滚动(Rollover)更新。

SQL server 200玖 中引进了Extended 伊夫nts 用以替换SQL Trace。 可是在率先个本子中并不曾为用户提供UI,因而使用Extended 伊芙nts并不是很方便。SQL Server 二零一二立刻校对了那一点,将UI管理工科具集成在SSMS中, 那就象征我们不须要再为了查询伊芙nt XML而学习使用XQuery了。因而跟多的DBA和付出由SQL trace 和Profiler转向了Extended 伊芙nts.

/****************************************************/
/* Created by: SQL Server 2008 Profiler             */
/* Date: 2014/11/23  20:28:11         */
/****************************************************/


-- Create a Queue
declare @rc int
declare @TraceID int
declare @maxfilesize bigint
--可以更改文件大小
set @maxfilesize = 5 

--默认死锁文件放置目录
declare @FilePath nvarchar(max)
set @FilePath=N'F:SQLTestDeadLock.trc'
-- Please replace the text InsertFileNameHere, with an appropriate
-- filename prefixed by a path, e.g., c:MyFolderMyTrace. The .trc extension
-- will be appended to the filename automatically. If you are writing from
-- remote server to local drive, please use UNC path and make sure server has
-- write access to your network share

exec @rc = sp_trace_create @TraceID output, 0, @FilePath, @maxfilesize, NULL 
if (@rc != 0) goto error

-- Client side File and Table cannot be scripted

-- Set the events
declare @on bit
set @on = 1
exec sp_trace_setevent @TraceID, 137, 15, @on
exec sp_trace_setevent @TraceID, 137, 32, @on
exec sp_trace_setevent @TraceID, 137, 1, @on
exec sp_trace_setevent @TraceID, 137, 13, @on
exec sp_trace_setevent @TraceID, 137, 22, @on
exec sp_trace_setevent @TraceID, 148, 11, @on
exec sp_trace_setevent @TraceID, 148, 12, @on
exec sp_trace_setevent @TraceID, 148, 14, @on
exec sp_trace_setevent @TraceID, 148, 1, @on
exec sp_trace_setevent @TraceID, 26, 15, @on
exec sp_trace_setevent @TraceID, 26, 32, @on
exec sp_trace_setevent @TraceID, 26, 1, @on
exec sp_trace_setevent @TraceID, 26, 9, @on
exec sp_trace_setevent @TraceID, 26, 57, @on
exec sp_trace_setevent @TraceID, 26, 2, @on
exec sp_trace_setevent @TraceID, 26, 10, @on
exec sp_trace_setevent @TraceID, 26, 11, @on
exec sp_trace_setevent @TraceID, 26, 35, @on
exec sp_trace_setevent @TraceID, 26, 12, @on
exec sp_trace_setevent @TraceID, 26, 13, @on
exec sp_trace_setevent @TraceID, 26, 6, @on
exec sp_trace_setevent @TraceID, 26, 14, @on
exec sp_trace_setevent @TraceID, 26, 22, @on
exec sp_trace_setevent @TraceID, 25, 15, @on
exec sp_trace_setevent @TraceID, 25, 32, @on
exec sp_trace_setevent @TraceID, 25, 1, @on
exec sp_trace_setevent @TraceID, 25, 9, @on
exec sp_trace_setevent @TraceID, 25, 57, @on
exec sp_trace_setevent @TraceID, 25, 2, @on
exec sp_trace_setevent @TraceID, 25, 10, @on
exec sp_trace_setevent @TraceID, 25, 11, @on
exec sp_trace_setevent @TraceID, 25, 35, @on
exec sp_trace_setevent @TraceID, 25, 12, @on
exec sp_trace_setevent @TraceID, 25, 13, @on
exec sp_trace_setevent @TraceID, 25, 6, @on
exec sp_trace_setevent @TraceID, 25, 14, @on
exec sp_trace_setevent @TraceID, 25, 22, @on
exec sp_trace_setevent @TraceID, 59, 32, @on
exec sp_trace_setevent @TraceID, 59, 1, @on
exec sp_trace_setevent @TraceID, 59, 57, @on
exec sp_trace_setevent @TraceID, 59, 2, @on
exec sp_trace_setevent @TraceID, 59, 14, @on
exec sp_trace_setevent @TraceID, 59, 22, @on
exec sp_trace_setevent @TraceID, 59, 35, @on
exec sp_trace_setevent @TraceID, 59, 12, @on
exec sp_trace_setevent @TraceID, 60, 32, @on
exec sp_trace_setevent @TraceID, 60, 9, @on
exec sp_trace_setevent @TraceID, 60, 57, @on
exec sp_trace_setevent @TraceID, 60, 10, @on
exec sp_trace_setevent @TraceID, 60, 11, @on
exec sp_trace_setevent @TraceID, 60, 35, @on
exec sp_trace_setevent @TraceID, 60, 12, @on
exec sp_trace_setevent @TraceID, 60, 6, @on
exec sp_trace_setevent @TraceID, 60, 14, @on
exec sp_trace_setevent @TraceID, 60, 22, @on
exec sp_trace_setevent @TraceID, 189, 15, @on
exec sp_trace_setevent @TraceID, 189, 32, @on
exec sp_trace_setevent @TraceID, 189, 1, @on
exec sp_trace_setevent @TraceID, 189, 9, @on
exec sp_trace_setevent @TraceID, 189, 57, @on
exec sp_trace_setevent @TraceID, 189, 2, @on
exec sp_trace_setevent @TraceID, 189, 10, @on
exec sp_trace_setevent @TraceID, 189, 11, @on
exec sp_trace_setevent @TraceID, 189, 35, @on
exec sp_trace_setevent @TraceID, 189, 12, @on
exec sp_trace_setevent @TraceID, 189, 13, @on
exec sp_trace_setevent @TraceID, 189, 6, @on
exec sp_trace_setevent @TraceID, 189, 14, @on
exec sp_trace_setevent @TraceID, 189, 22, @on
exec sp_trace_setevent @TraceID, 45, 16, @on
exec sp_trace_setevent @TraceID, 45, 1, @on
exec sp_trace_setevent @TraceID, 45, 9, @on
exec sp_trace_setevent @TraceID, 45, 17, @on
exec sp_trace_setevent @TraceID, 45, 10, @on
exec sp_trace_setevent @TraceID, 45, 18, @on
exec sp_trace_setevent @TraceID, 45, 11, @on
exec sp_trace_setevent @TraceID, 45, 35, @on
exec sp_trace_setevent @TraceID, 45, 12, @on
exec sp_trace_setevent @TraceID, 45, 13, @on
exec sp_trace_setevent @TraceID, 45, 6, @on
exec sp_trace_setevent @TraceID, 45, 14, @on
exec sp_trace_setevent @TraceID, 45, 22, @on
exec sp_trace_setevent @TraceID, 45, 15, @on
exec sp_trace_setevent @TraceID, 44, 1, @on
exec sp_trace_setevent @TraceID, 44, 9, @on
exec sp_trace_setevent @TraceID, 44, 10, @on
exec sp_trace_setevent @TraceID, 44, 11, @on
exec sp_trace_setevent @TraceID, 44, 35, @on
exec sp_trace_setevent @TraceID, 44, 12, @on
exec sp_trace_setevent @TraceID, 44, 6, @on
exec sp_trace_setevent @TraceID, 44, 14, @on
exec sp_trace_setevent @TraceID, 44, 22, @on
exec sp_trace_setevent @TraceID, 41, 15, @on
exec sp_trace_setevent @TraceID, 41, 16, @on
exec sp_trace_setevent @TraceID, 41, 1, @on
exec sp_trace_setevent @TraceID, 41, 9, @on
exec sp_trace_setevent @TraceID, 41, 17, @on
exec sp_trace_setevent @TraceID, 41, 10, @on
exec sp_trace_setevent @TraceID, 41, 18, @on
exec sp_trace_setevent @TraceID, 41, 11, @on
exec sp_trace_setevent @TraceID, 41, 35, @on
exec sp_trace_setevent @TraceID, 41, 12, @on
exec sp_trace_setevent @TraceID, 41, 13, @on
exec sp_trace_setevent @TraceID, 41, 6, @on
exec sp_trace_setevent @TraceID, 41, 14, @on
exec sp_trace_setevent @TraceID, 40, 1, @on
exec sp_trace_setevent @TraceID, 40, 9, @on
exec sp_trace_setevent @TraceID, 40, 6, @on
exec sp_trace_setevent @TraceID, 40, 10, @on
exec sp_trace_setevent @TraceID, 40, 14, @on
exec sp_trace_setevent @TraceID, 40, 11, @on
exec sp_trace_setevent @TraceID, 40, 35, @on
exec sp_trace_setevent @TraceID, 40, 12, @on


-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint

exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Server Profiler - efbc9d24-69cd-465f-8daf-e38493da0332'
-- Set the trace status to start
exec sp_trace_setstatus @TraceID, 1

-- display trace id for future references
select TraceID=@TraceID
goto finish

error: 
select ErrorCode=@rc

finish: 
go

若是未有拉开,我们也得以应用如下语句举办开启,只怕关闭等操作

伍,查看暗中认可追踪记录的事件列表

改变Trace到Extended 伊芙nts 事件会话

将早已存在的Trace文件定义转变为事件会话,小编推荐的秘技使用1个囤积进度,他的小编是 Jonathan Kehayias。 你能够从( 那几个剧本只可以在SQL Server 二零一三及将来版本运维,认为SQL Server 2011原先的版本Extended 伊芙nts并不帮助具有的Trace事件。

手动调换Trace到Extended 伊夫nts会话

借使出于一些原因你不可能使用上述存款和储蓄进程,微软文书档案介绍了一个手动调换进程:Convert an Existing SQL Trace Script to an Extended 伊夫nts Session ()

在您的SQL实例中推行以上脚本用于创建那几个蕴藏进程。实行那一个蕴藏进程仅需求输入以下参数,如Listing 陆 所示。

EXECUTE sp_SQLskills_ConvertTraceToExtendedEvents 
              @TraceID = 2, 
              @SessionName = 'XE_ReadsFilter_Trace', 
              @PrintOutput = 1, 
              @Execute = 0;

Listing 6: Converting a server-side trace to use Extended Events

参数@TraceID 是您要转变为Extended event 的Trace ID。因此,这一个Trace必须存在,无论正在实践与否。在此地TraceID为2(从Listing 伍的实践结果中获得)。

实践这些蕴藏进程为ReadsFilter_Trace.trc Trace生成Extended Event会话DLL脚本,如Listing7所示:

IF EXISTS ( SELECT 1
             FROM   sys.server_event_sessions
             WHERE  name = 'XE_ReadsFilter_Trace' )
    DROP EVENT SESSION [XE_ReadsFilter_Trace] ON SERVER;
GO
 CREATE EVENT SESSION [XE_ReadsFilter_Trace] ON SERVER
 ADD EVENT sqlserver.rpc_completed (
    ACTION ( sqlserver.client_app_name   -- ApplicationName from SQLTrace
    , sqlserver.database_id              -- DatabaseID from SQLTrace
    , sqlserver.server_instance_name     -- ServerName from SQLTrace
    , sqlserver.session_id               -- SPID from SQLTrace
                   -- EndTime implemented by another Action in XE already
                   -- StartTime implemented by another Action in XE already
   )
    WHERE 
   ( logical_reads >= 10000 ) ),
 ADD EVENT sqlserver.sql_statement_completed (
    ACTION ( sqlserver.client_app_name   -- ApplicationName from SQLTrace
    , sqlserver.database_id              -- DatabaseID from SQLTrace
    , sqlserver.server_instance_name     -- ServerName from SQLTrace
    , sqlserver.session_id               -- SPID from SQLTrace
                   -- EndTime implemented by another Action in XE already
                   -- StartTime implemented by another Action in XE already
   )
    WHERE 
   ( logical_reads >= 10000 ) )
 ADD TARGET package0.event_file (  SET filename =                                  'C:tempXE_ReadsFilter_Trace.xel' ,
                                   max_file_size = 5 ,
                                   max_rollover_files = 1 )
GO

Listing 7: The Extended Events event session

当运转到一段时间之后,我们直接拷贝下来,找台微型计算机分析就可以了。

简短的举多少个使用场景:

SQL Server中有关追踪(Trace)那一点事

钦命目的

在加上具备事件后,大家选择ADD TAXC90GET 来钦赐输出目的,SQL Server将募集的数码以及有关的Actions写入目的。在Trace中大家得以选择输出至文件,也许试试写入Profiler,纵然不被推荐。在Extended 伊夫nts大家也有八个对象能够挑选,包蕴最核心内部存款和储蓄器存储(ring_buffer)和文件系统存款和储蓄(event_file),同时又有个别高级的目的能够提供数据聚合功用。

在这几个例子中,大家将选拔event_file作为目标,这一点与Trace输出至.trc文件类似,不过大家须要在文件中钦命文件扩充名。

/* Extended Events */

ADD TARGET package0.event_file
(
      SET filename = 'C:tempXE_ReadsFilter_Trace.xel',
             max_file_size = 5,
             max_rollover_files = 1
)
/* Trace */

-- Create a Queue
declare @rc int
declare @TraceID int
declare @maxfilesize bigint
set @maxfilesize = 5 

exec @rc = sp_trace_create @TraceID output, 0, N'InsertFileNameHere', @maxfilesize, NULL 
if (@rc != 0) goto error
Listing 13: Specifying the target for the event session

Listing 13: Specifying the target for the event session
未有差距于大家能够设置文件大小,以及大家得以安装创制的滚动跟新文件数量

经过以下命令找到默许追踪的文本路线

select * from sys.configurations where configuration_id = 1568

导出的本子如下,不能够一贯运用,必须修改1处代码:在开创Trace时,内定期存款储追踪数据的文书(File) 或 关系表(Table),仅此而已。

本条种类教程中,大家将详细的牵线怎么着使用Extended 伊芙nts作为检查判断数据搜罗工具,用来追踪SQL Server的习性难题。第1节中我们将从三个DBA都锁熟识的标题开始: 使用SQL trace 追踪侦查 long-rannning 查询。 从基础开头,笔者会介绍怎么着使用Extended 伊芙nts 完结一样的天职。

 

上述的追踪事件中,基本涵盖了SQL Server中所能做的任何操作,我们能够根据本人供给开始展览定义,当大家得以本着普通平时遇上的一对难点进行固化,比如:死锁、等待、登入战败等等吧...当然也得以追踪有个别人的具有行为举止,那里大家来定义多少个来探望

八,使用SQL Server Profiler创建SQL Trace

定义predicate

在挑选过事件和附加的Actions后,接下的壹段定义了过滤器。

/* Extended Events */
    WHERE 
     ( logical_reads >= 10000 )
/* Trace */

-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint

exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Server Profiler - f45d52c9-c0eb-45da-8bae-dc6f1a945251'
set @bigintfilter = 10000
exec sp_trace_setfilter @TraceID, 16, 0, 4, @bigintfilter

 

Listing 11: Adding a filter

回顾下当大家选取Profiler定义trace时,大家使用了Sp_trace_setfilter设置了3个过滤,排除具备小于一千0Reads的事件数量。在事件会话定义中,那么些过滤,术语为谓词,是3个简练的WHERE子句。

Extended 伊芙nts实行早期过滤。换句话说,在事变基础数据搜集后里立时实行谓词,唯有顺应过滤条件的事件实例才会被触发。那种专门的学业体制与SQL Trace和Profiler的末尾过滤比较,在数额搜聚时的开销更加小。

ca888会员登录 2

经过如下命令举行追踪的删减

-- Create a Queue
declare @rc int
declare @TraceID int
declare @maxfilesize bigint
set @maxfilesize = 5

-- Client side File and Table cannot be scripted
exec @rc = sp_trace_create @TraceID output, 0, N'InsertFileNameHere', @maxfilesize, NULL 
if (@rc != 0) goto error

-- Set the events
declare @on bit
set @on = 1
exec sp_trace_setevent @TraceID, 14, 1, @on
exec sp_trace_setevent @TraceID, 14, 9, @on

--delete many commands here ---

-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint
exec sp_trace_setfilter @TraceID, 1, 0, 6, N'%drop%'

-- Set the trace status to start
exec sp_trace_setstatus @TraceID, 1

-- display trace id for future references
select TraceID=@TraceID
goto finish

error: 
select ErrorCode=@rc

finish: 
go

添加Event和Actions

接下去,Extended 伊夫nts脚本利用CREATE EVENT SESSION 的 ADD EVENT 子句内定了第4个事件,此处为 rpc.completed事件,并且接下去钦点了风波触发时实践的有的外加动作,那么些例子中为采访额外的四个事件数据列。

/*Extended Events*/
ADD EVENT sqlserver.rpc_completed (
    ACTION (
      sqlserver.client_app_name
    , sqlserver.database_id
    , sqlserver.server_instance_name
    , sqlserver.session_id
           )

 

/* Trace */
-- Set the events
declare @on bit
set @on = 1
exec sp_trace_setevent @TraceID, 10, 10, @on
exec sp_trace_setevent @TraceID, 10, 3,  @on
exec sp_trace_setevent @TraceID, 10, 12, @on
exec sp_trace_setevent @TraceID, 10, 13, @on
exec sp_trace_setevent @TraceID, 10, 14, @on
exec sp_trace_setevent @TraceID, 10, 15, @on
exec sp_trace_setevent @TraceID, 10, 16, @on
exec sp_trace_setevent @TraceID, 10, 18, @on
exec sp_trace_setevent @TraceID, 10, 26, @on

 

Listing 10: Adding actions

那里有几处Extended 伊芙nts和Trace关键的不一样点供给提出。第一,注意事件名和Actions中搜聚的数据列(如:client_app_name, database_id),他们是文本。大家不须要再查询哪些数字对应的风浪依然数据列!与SQL Trace相比,书写阅读Extended 伊夫nts脚本变的特别简便易行。

其次,注意Extended 伊芙nts脚本中并未点名全部的数据列。事实上,许多数据列被定义为事件的私下认可负载被采访。大家赫赫有名不必要在剧本中钦定这一个默许列。可是大家得以使用UI来查看事件的私下认可负载由什么列组成, 我们会在下1阶教程中教授。

那是Trace 和Extended 伊夫nts贰个要害的行为不相同。SQL Trace 默许行为是采撷全部相当的大恐怕卓有功能的列。然后由用户过滤任何不必要的新闻。Extended 伊夫nts 越发急迅,每种事件有一组由最少的数据列组成的私下认可负载,在事变出发时总会被暗中同意搜聚。假若大家必要搜聚其余不再默许负载中的列,大家必要以Actions形式充分他们。比方,在RPC:Completed事件中加上的Actions:client_app_name, database_id, server_instance_name 和session_id, 他们都不属于事件的私下认可负载。搜集这个Actions是可选的。

因为唯有暗许负载事件列会被含有在时刻中,由此开始化事件采访的付出相对十分小。Actions数据搜集是在谓词过滤后才发生的,由此收罗大量的Actions,或然高消耗的Actions(如内部存款和储蓄器Dump),都会扩大Extended 伊芙nts会话的花费。由此,审慎的挑3拣四额外的数量搜罗对抓获事件更是关键。大家会在下1阶中详尽研究那个宗旨。

select * from sys.configurations where configuration_id = 1568

      

exec sp_configure 'default trace enabled' , 0 ;
go
reconfigure;
go

exec sp_configure 'show advanced options' , 0 ;
go
reconfigure;
go

Extended 伊夫nts不仅仅是一个用以替换SQL trace 和Profiler的工具。通过总体这几个体系教程, 你会意识那多少个使用SQL trace 往往会损耗过高代价的确诊,在Extended 伊夫nt 变的具体, 并且从前困难的,以至不恐怕的追踪职责不但变的有用,而且尤其简约。

譬如说死锁查找,CPU消耗高,IO值高的那多少个语句....

 

SQL Server 默许追踪(Default Trace)

运维事件会话

与Trace同样,Extended 伊夫nt会话不会被暗中认可运营。为了运营四个对话,大家必要运用Listing 第11四中学所示的ALERT语句。

ALTER EVENT SESSION [XE_ReadsFilter_Trace]
 ON SERVER
 STATE=START;
GO

Listing 14: Starting the event session

施行运维后,大家能够运作一段脚本来验证Extended 伊夫nts是还是不是曾经起步。

/* Extended Events */

SELECT
  [es].[name] AS [EventSession],
 [xe].[create_time] AS [SessionCreateTime],
  [xe].[total_buffer_size] AS [TotalBufferSize],
  [xe].[dropped_event_count] AS [DroppedEventCount]
FROM [sys].[server_event_sessions] [es]
LEFT OUTER JOIN [sys].[dm_xe_sessions] [xe] ON [es].[name] = [xe].[name];
GO
/* Trace */

SELECT 
  [id] AS [TraceID],
  CASE
    WHEN [status] = 0 THEN 'Not running'
    WHEN [status] = 1 THEN 'Running'
  END AS [TraceStatus],
  [start_time] AS [TraceStartTime],
  [buffer_size] AS [BufferSize],
  [dropped_event_count] AS [DroppedEventCount]
FROM [sys].[traces];
GO

Listing 15: Check to see which event sessions and traces are running

在那一个事例里,咱们能够见到Figure 三中的输出,他们来得了大家所开创的用户事件会话和Trace,同样,事件会话和Trace已经被运行了。

就像Trace由1个私下认可直至实行的Trace(TraceID =一), Extended 伊芙tns也有system_health 事件会话,那么些与暗许Trace并不完全平等。我们在下阶中再看system_health 会话。假若您利用了Availability Groups (AG),也会有1个AlwaysOn_health 会话一贯推行,来采访AG相关的新闻以及故障检验事件。

ca888会员登录 3

Figure 3: Which traces and event sessions are running?

在大家运行了Trace和Session后,大家能够运用ALTERSESSION来终止事件会话,使用sp_trace_setstatus停止Trace。

/* Extended Events */

ALTER EVENT SESSION [XE_ReadsFilter_Trace]
  ON SERVER
  STATE=STOP;
GO
/* Trace */

DECLARE @TraceID INT = 2;
EXEC sp_trace_setstatus @TraceID, 0; 
GO

Listing 16: Stopping the extended events session and trace

此时,没有数量被采访,可是咱们定义的Trace和事件会话都还在,大家得以依赖须要再也运营他们,可能将她们的概念完全除去。

/* Extended Events */

DROP EVENT SESSION [XE_ReadsFilter_Trace]
    ON SERVER;
GO
/* Trace */

DECLARE @TraceID INT = 2;
EXEC sp_trace_setstatus @TraceID, 2; 
GO

Listing 17: Removing the extended events session and trace definition

作者们并不推荐在事变会话完结后将它删除。恐怕很几个人有在运用Trace时有那个习贯,在Trace中当SQL实例被重启后,除了暗许Trace别的Trace定义会全部有失。这一个也是Extended 伊芙nts与Trace首要的差异点:会话定义会作为元数据保存在服务器中,并且会被持久化。创立过事件会话后,你就能够依照需求运维或终止它了。

那种方法接近天经地义,不过它也有自个儿的老毛病,大家来看:

那种方法接近不错,不过它也有小编的瑕疵,大家来看:

select * 
from sys.fn_trace_gettable(N'C:Program FilesMicrosoft SQL ServerMSSQL11.MSSQLSERVERMSSQLLoglog_4.trc',default)

始建事件会话

剧本首先包括了一个IF段落注明,用于检查是还是不是有同名事件会话存在,假如存在则删除它。那样可以制止在成立事件会话时出现谬误。

IF EXISTS ( SELECT  1
            FROM    sys.server_event_sessions
            WHERE   name = 'XE_ReadsFilter_Trace' )
    DROP EVENT SESSION [XE_ReadsFilter_Trace] ON SERVER;
GO

Listing 8: Checking for the existence of an event session with the same name

那段脚本接着使用CREATE EVENT SESSION 语法创立了三个事变会话(

/* Extended Events */

CREATE EVENT SESSION [XE_ReadsFilter_Trace]
ON SERVER
-- Create a Queue
DECLARE @rc INT
DECLARE @TraceID INT
DECLARE @maxfilesize BIGINT
SET @maxfilesize = 5 

-- Please replace the text
--InsertFileNameHere…etc…

EXEC @rc = sp_trace_create @TraceID OUTPUT, 0, N'InsertFileNameHere',
    @maxfilesize, NULL 
IF ( @rc != 0 )
    GOTO ERROR

 

Listing 9: Create the event session

那几个追踪通过在sp_trace_create的暗中认可@option参数设置为八来布置的。代码如下:

2.自定义追踪消息(Default Trace)

假使暗许追踪被禁止使用,要求重新配置启用私下认可追踪:

增加其余事件

此时rpc_completed 事件早已安插达成。增添任何的轩然大波仅需利用ADD EVENT子句再度增加,如Listing1二所示的增进sql:statement_completed事件。

ADD EVENT sqlserver.sql_statement_completed(
   ACTION 
   (
           sqlserver.client_app_name         -- ApplicationName from SQLTrace
          , sqlserver.database_id            -- DatabaseID from SQLTrace
          , sqlserver.server_instance_name   -- ServerName from SQLTrace
          , sqlserver.session_id             -- SPID from SQLTrace
                   -- EndTime implemented by another Action in XE already
                   -- StartTime implemented by another Action in XE already
   )
   WHERE 
   (
           logical_reads >= 10000
   )

Listing 12: Adding a second event to the event session

双重,大家得以选择额外的数据列。Extended 伊夫nts的狡猾在于大家可认为各样事件设置同样也许区别的过滤条件。那点在Trace中不大概到位,过滤条件对于有所事件生效。其它在Extended 伊夫nts中我们得以设置越来越多壮大的过滤条件,如大家得以选取AND和O大切诺基条件,在此大家不做过多研究。

ca888会员登录 4

在线生产库为啥突然宕机?数百张数据表为啥不见?刚打好补丁的系统为何屡遭毒手?新加上的新闻表为什么频频丢失?某张表字段的突兀改变,究竟为啥许人所为?这一个个佚名的拜会背后,毕竟是人是鬼?突然增添的增量数据,毕竟是对是错?数百兆的日记爆炸式的增高背后又隐藏着怎样?那1且的背后,是应用程序的BUG依旧用户品质的不够?

四,查看追踪文件的剧情

检查Extended 伊夫nt事件会话

与大家解析由Profiler生成的劳动器端Trace脚本一样,大家会透过分化的段落稳步分析Extended 伊夫nts事件会话是如何创立的。

咱俩通过下边包车型客车跟踪创立的进度,能够在系统自带的私下认可的sys.traces中找到该追踪的绵密
ca888会员登录 5

一提到追踪俩字,很三人想到警察匪徒片中的场景,一样在大家的SQL Server数据库中“追踪”也是无处不在的,假使大家利用好了追踪本领,就足以本着少数特定的景色做定向分析,寻觅富饶的凭证来破案。

私下认可追踪是系统内置的,TraceID是壹,暗中同意是翻开的,能够因而系统铺排表 sys.configurations 举行查看,配置项ID(configuration_id)是1568:

从大家熟稔的起来: SQL Trace

从自己的经历讲,学习新东西最轻便的方式就是从大家已知的文化开头。下边对于 SQL Trace 和Profiler等那些你已熟悉的学问介绍,将用作大家明白Extended 伊芙nt专门的职业格局的根基,且并精通它与SQL Trace 和Profiler的分化。

对此数据库专家,排查SQL查询质量难题是大家日常遇上的难点之一。在此以前,大家常常会成立一个Trace用于捕捉与大家存款和储蓄进程或SQL试行有关的轩然大波。大家司空眼惯会安装有个别过滤条件,如超越一定数额的Reads,特定的举行时间可能消耗的CPU等。

普普通通张开Profiler来定义trace是一个方便飞快的办法。当大家新建1个trace,也大概是利用部分已有的模板,连接受SQL 实例,并精选要求的时光。在截图第11中学,我们仅选拔了五个事件“RPC:Completed" 和"SQL:StmtCompleted”,并捕捉了千篇一律的数据列。

ca888会员登录 6

Figure 1: Selecting events and data columns for a trace

当使用Profiler或SQL Trace时,加多过滤过滤条件总是被推荐的。不过与Extended 伊夫nt比,使用SQL Trace的标题之一便是前期过滤。及时我们定义了过滤条件,SQL Trace or Profiler 任然会收集事件实例的全部数目,然后再过滤它。当然,过滤条件依然是越发重大的,它保险了大家的发送到客户端如故目的文件的风浪是通过过滤的。
在那几个例子中,我们抬高三个过滤条件:Reads 大于等于一千0,如图贰

ca888会员登录 7

Figure 2: Defining a trace filter on number of reads

当我们选择好事件和列,设置过滤,以及保存的Trace 文件后,大家就足以运转Trace了。经验丰硕的DBA和开拓都知晓直接运行Profiler会带来惨重的性责问题( ).因而为了最小化对生育情状的震慑,最棒的点子是点击开始后立刻终止Trace,然后通过"File | Export | Script Trace Definition | For SQL Server 200五 – 201四"菜单导出脚本。 那样做之后Trace就要劳动器端实施而不是在 Profiler的GUI上实行。 List 1 是导出的SQL脚本。

/****************************************************/
/* Created by: SQL Server 2014 Profiler          */
/* Date: 11/30/2015  08:50:44 AM         */
/****************************************************/

-- Create a Queue
DECLARE @rc INT
DECLARE @TraceID INT
DECLARE @maxfilesize BIGINT
SET @maxfilesize = 5 

-- Please replace the text InsertFileNameHere, with an appropriate
-- filename prefixed by a path, e.g., c:MyFolderMyTrace. The .trc extension
-- will be appended to the filename automatically. If you are writing from
-- remote server to local drive, please use UNC path and make sure server has
-- write access to your network share

EXEC @rc = sp_trace_create @TraceID OUTPUT, 0, N'InsertFileNameHere',
    @maxfilesize, NULL 
IF ( @rc != 0 )
    GOTO error

-- Client side File and Table cannot be scripted

-- Set the events
DECLARE @on BIT
SET @on = 1
EXEC sp_trace_setevent @TraceID, 10, 10, @on
EXEC sp_trace_setevent @TraceID, 10, 3, @on
EXEC sp_trace_setevent @TraceID, 10, 12, @on
EXEC sp_trace_setevent @TraceID, 10, 13, @on
EXEC sp_trace_setevent @TraceID, 10, 14, @on
EXEC sp_trace_setevent @TraceID, 10, 15, @on
EXEC sp_trace_setevent @TraceID, 10, 16, @on
EXEC sp_trace_setevent @TraceID, 10, 18, @on
EXEC sp_trace_setevent @TraceID, 10, 26, @on
EXEC sp_trace_setevent @TraceID, 41, 3, @on
EXEC sp_trace_setevent @TraceID, 41, 10, @on
EXEC sp_trace_setevent @TraceID, 41, 12, @on
EXEC sp_trace_setevent @TraceID, 41, 13, @on
EXEC sp_trace_setevent @TraceID, 41, 14, @on
EXEC sp_trace_setevent @TraceID, 41, 15, @on
EXEC sp_trace_setevent @TraceID, 41, 16, @on
EXEC sp_trace_setevent @TraceID, 41, 18, @on
EXEC sp_trace_setevent @TraceID, 41, 26, @on
EXEC sp_trace_setevent @TraceID, 41, 61, @on


-- Set the Filters
DECLARE @intfilter INT
DECLARE @bigintfilter BIGINT

EXEC sp_trace_setfilter @TraceID, 10, 0, 7,
    N'SQL Server Profiler - f45d52c9-c0eb-45da-8bae-dc6f1a945251'
SET @bigintfilter = 10000
EXEC sp_trace_setfilter @TraceID, 16, 0, 4, @bigintfilter

-- Set the trace status to start
EXEC sp_trace_setstatus @TraceID, 1

-- display trace id for future references
SELECT  TraceID = @TraceID
GOTO finish

error: 
SELECT  ErrorCode = @rc

finish: 
go

Listing 1: A server-side trace to capture poorly-performing queries

有个外人以前逐句的开卷过上述SQL Trace 脚本,也或许只是对上述脚本的遵循由必然了然。 然则为着确定保证我们在同壹块跑线上,大家会飞快的解释一下那段脚本。

开班的1段定义了一部分用于创建Trace的仓库储存进程sp_trace_create 所急需的变量。作为3个用户,大家第三定义了最大文件大小(那么些事例中@maxfilesize设置的为伍MB)。我们也得以钦定是还是不是。越多关于sp_trace_create细节请查看

出口文件路线也是sp_trace_create的1部分。在运作那些Trace钱,请使用3个适宜的文本路径替换InsertFileNameHere,如“C:tempReadsFilter_Trace"。依照脚本的申明,我们不必要钦赐.trc后缀名。

-- Create a Queue
DECLARE @rc INT
DECLARE @TraceID INT
DECLARE @maxfilesize BIGINT
SET @maxfilesize = 5 

-- Please replace the text InsertFileNameHere, with an appropriate
-- filename prefixed by a path, e.g., c:MyFolderMyTrace. The .trc extension
-- will be appended to the filename automatically. If you are writing from
-- remote server to local drive, please use UNC path and make sure server has
-- write access to your network share

EXEC @rc = sp_trace_create @TraceID OUTPUT, 0, N'InsertFileNameHere',
    @maxfilesize, NULL 
IF ( @rc != 0 )
    GOTO error

Listing 2: The sp_trace_create portion of the server-side trace

基于以上定义,那么些Trace会平昔实行,直到大家手动截至它。可能,大家可感觉sp_trace_create提供3个@datetime参数,那样大家就足以界定Trace的推行时间(例如大家能够安装进行2个钟头set @DateTime = dateadd(hh, 壹, getdate())。

Trace脚本的下一段设置了我们所需求的风云。存款和储蓄进程sp_trace_setevent增添了大家需求捕获的事件和列。那一个使用数据来标志的风浪和列并不便于阅读。我们平时必要MSDN( 和SQL:StmtCompleted事件。接下来第二列定义了数据列。比方10表示ApplicationName,三象征DatabaseID等。为了更清晰的查阅,作者在源代码上增多了疏解。

 

-- Set the events
declare @on bit
set @on = 1
exec sp_trace_setevent @TraceID, 10, 10, @on    --RPC:Completed, AppName
exec sp_trace_setevent @TraceID, 10, 3,  @on    --RPC:Completed, DatabaseID
exec sp_trace_setevent @TraceID, 10, 12, @on    --RPC:Completed, SPID
exec sp_trace_setevent @TraceID, 10, 13, @on    --RPC:Completed, Duration
exec sp_trace_setevent @TraceID, 10, 14, @on    --RPC:Completed, StartTime
exec sp_trace_setevent @TraceID, 10, 15, @on    --RPC:Completed, EndTime
exec sp_trace_setevent @TraceID, 10, 16, @on    --RPC:Completed, Reads
exec sp_trace_setevent @TraceID, 10, 18, @on    --RPC:Completed, CPU
exec sp_trace_setevent @TraceID, 10, 26, @on    --RPC:Completed, ServerName
exec sp_trace_setevent @TraceID, 41, 3,  @on    --SQL:StmtCompleted, DatabaseID
exec sp_trace_setevent @TraceID, 41, 10, @on    --SQL:StmtCompleted, AppName
exec sp_trace_setevent @TraceID, 41, 12, @on    --SQL:StmtCompleted, SPID
exec sp_trace_setevent @TraceID, 41, 13, @on    --SQL:StmtCompleted, Duration
exec sp_trace_setevent @TraceID, 41, 14, @on    --SQL:StmtCompleted, StartTime
exec sp_trace_setevent @TraceID, 41, 15, @on    --SQL:StmtCompleted, EndTime
exec sp_trace_setevent @TraceID, 41, 16, @on    --SQL:StmtCompleted, Reads

Listing 3: Setting the trace events

在数据库引擎中,Trace调节器会检查3个轩然大波是或不是供给被抓获。纵然须求则将事件的音讯发送到SQL跟踪行集提供程序,大概1旦你运转的Profiler,只怕是文本。在Trace发送这个音信前,全部不供给的行会被移除。举个例子在我们定义的五个事件中,大家尚无选取DatabaseName。然则SQL server 任然会为那八个小时捕捉DatabaseName列,只是它并不会被发送到GUI也许封存在文件中。

在最终一步中,大家使用存款和储蓄进程sp_trace_setfilter为Trace定义了过滤条件。四个过过滤条件“SQL Server Profiler - f肆5d5二c九-c0eb-肆5da-八bae-dc6f1a94525一”是由脚本暗中同意生成的,它过滤了一部分由Profiler UI生成的“admin”查询(SELECT SE翼虎VERPROPERTY )。

在这么些事例中,大家设置了八个过滤条件,只将Reads大于等于10000 (@bigintfilter = 一千0)的查询语句或存储进程发送到目标文件中。又一次提示,那是前期过滤,全部的风云和音讯都会被捕捉。然后在发送到文件或客户端前依据筛选典型移除。

-- Set the Filters
DECLARE @intfilter INT
DECLARE @bigintfilter BIGINT

EXEC sp_trace_setfilter @TraceID, 10, 0, 7,
    N'SQL Server Profiler - f45d52c9-c0eb-45da-8bae-dc6f1a945251'
SET @bigintfilter = 10000
EXEC sp_trace_setfilter @TraceID, 16, 0, 4, @bigintfilter

Listing 4: Setting the trace filter

本子的末段1段使用存款和储蓄进度sp_trace_setstatus 运行Trace,并展现TraceID。那个唯壹的TraceID用于结束Trace,也得以用于删除Trace定义。

-- Set the trace status to start
EXEC sp_trace_setstatus @TraceID, 1

-- display trace id for future references
SELECT  TraceID = @TraceID
GOTO finish

error: 
SELECT  ErrorCode = @rc

finish: 
go

Listing 5: Starting the trace

只要我们施行了那一个剧本,Trace将被运转并将随处的周转和搜罗事件数量,直至大家结束它。今后,我们怎么将那些所掌握的才能,使用Extended 伊夫nt代替呢?

简短的举多少个使用场景:

 

sys.fn_trace_gettable ( 'filename' , number_files )

--设置跟踪状态以停止
exec sp_trace_setstatus @TraceID,0

ca888会员登录 8

ca888会员登录 9ca888会员登录 10

什么是Extended Event

Extended Event 是三个事变采访基础设备,最早在 SQL Server 二零零六中引进。大家得以使用Extended 伊芙nt 收罗分析SQL server 实例和数据库发生的例外体系型的确诊数据。Extended 伊夫nt是SQLOS的1有个别, 它由众多模块组成,并在SQL Server运转时被加载。它提供了大量的事件集用以替换,进步和壮徐熙媛(Barbie Hsu)QL Trace中的事件。

当微软调节使用Extened 伊夫nts 替换SQL Trace时,他们从草图起头设计了壹整套event搜罗架构。他的目的之一正是惊人的可扩展性,能够根据须求增添新的event。与此同时微软为SQL Server引进一多元的Feature, 如Avaliability Groups, In-Memory OLTP和Columnstore indexes, 因而也同时为那一个Feature增多了对应的伊芙nt,用以当使用这几个Feature时采集检查判断数据。对于SQL Server 二零一二及以上版本,选用Extended 伊芙nt 至关心珍视要,因为新Featrue参预的event只幸好Extened 伊芙nts中找到。

表一中罗列的各首要SQL Server 版本中可用的Extended 伊芙nt事件数量。那一个是任何的事件, 包涵debug 事件, 同样那个本子中, SQL Trace 唯有177个事件。 在SQL Server 2013中,SQL Trace的兼具事件都有一个才子佳人的Extended 伊芙nts事件,固然他们并未有各样对应。
SQL Server Version Number of Events Notes
ca888会员登录 11

另2个Extended 伊夫nts设计的显要目的是不择花招减小搜聚数据的熏陶,在考察难点时减小系统万分的开辟。Extended event 使用了各类措施来落成那壹对象, 大家接下去进一步探讨:

伊芙nt最小暗许负载——暗中同意情状下每种事件仅搜聚最少的事件数据列。借使我们希望尤其搜罗列,我们亟须出示的足够“Actions”到事件中。SQL Trace的布署性中默许会搜罗大量的负载数据,然则大家仅仅忽略了那个不须要的数目。
强有力的过滤谓词——Extended伊夫nts提供了那么些细致的过滤 通过谓词,我们得以只搜集那么些符合特定条件的风浪。大家可以使用谓词来采访特定的事件,如每发生八遍, 恐怕只收罗一些特定的尺码下的轩然大波,如当多个的数目标值(如Duration)比原先的值大。Extended 伊芙nt在事变触发的中期一旦暗许负载数据搜集实现就会被过滤,那样能够制止任何不需求的多寡收罗进程。
Advanced Tagets—— 与SQL Trance 相似,同时援救In-Memory(Ring_bufer)和文件系统(event_file)作为目的。 Extended events 提供了基于特定条件聚合数据选拔对象。

这就代表,就算大家设计了相对较发杂的轩然大波会话,数据来源于数据分化的风浪,我们借使小心的计划谓词并采纳那一个大家须求搜聚的目的数据,我们得以相当的小的代价来调查服务器。
总之,大批量的风浪,结合高效的过滤以及两种抉择,使得Extended Event成为三个遥远超过Trace的事件收罗器。

ca888会员登录,@options 钦定为追踪设置的选项,系统暗许提供的多少个选择:

 

View Code

3.死锁案例(201肆年6月二四日晚补充)

诸如死锁查找,CPU消耗高,IO值高的那一个语句....

 

ca888会员登录 12

大家经过地方的追踪创设的过程,能够在系统自带的私下认可的sys.traces中找到该追踪的细心
ca888会员登录 13

三,查看默许追踪的音信

sp_trace_create [ @traceid = ] trace_id OUTPUT 
          , [ @options = ] option_value  
          , [ @tracefile = ] 'trace_file' 
     [ , [ @maxfilesize = ] max_file_size ]
     [ , [ @stoptime = ] 'stop_time' ]
     [ , [ @filecount = ] 'max_rollover_files' ]

上述命令归来的结果值,各样值(property)代表的意思如下:

SQL Trace

@columnid 要为该事件增添的列的 ID

至此,大家新建的追踪已经开头运维了,大家得以利用方面包车型大巴情势,来查看我们转移的寻踪文件了,其实好多时候,大家都是使用此种方法设置好”圈套“,等待鱼儿上网

Category用于协会事件(伊芙nt),是事件的分组,在SQL Server 2011中,共有二三个Category,1七十七个伊芙nt,每种伊夫nt属于唯①的三个Category。

其次个:表示方今利用的trace文件路线,依照它大家得以找到其余的追踪文件,暗中认可是如出1辙目录下

@on 表示事件情状

Server-wide Configuration Catalog Views (Transact-SQL).aspx)

@maxfilesize 追踪文件的大大小小,单位是MB,私下认可不设置为5MB

ca888会员登录 14

字段 value=一,表示Default Trace是翻开的。

二、本身默许的追踪,只是提供部分首要消息的寻踪,个中囊括:auditing events,database events,error events,full text events,object creation,object deletion,object alteration,想要找到别的更详尽的剧情,此办法大概无能为力;

ca888会员登录 15

在SQL Server 二〇一二中,事件共有陆21个字段,但不是每种伊夫nt都能绑定全部的陆15个字段,各类伊芙nt能够绑定的字段是一定的,系统预先安装,用户无法改改,视图 sys.trace_event_bindings 用于体现种种事件绑定的字段。

透过如下命令进行追踪的删减

 

参考文档:

ca888会员登录 16

--设置跟踪状态以启动
exec sp_trace_setstatus @TraceID,1

陆,查看事件和Category

ca888会员登录 17

我们只须求将这么些剧本运维就足以,当然此段脚本,在实例重启的时候,全体的trace都会去除掉,能够将该段代码改成存款和储蓄进度,然后设置成实例运营的时候运营,

函数再次来到的是涉嫌表,有效字段是:追踪关联的轩然大波绑定的字段,

咱们经过以下命令来查阅追踪文件中的内容:

ca888会员登录 18

select id
    ,iif(status=1,'running','stopped') as status
    ,path
    ,max_size
    ,start_time
    ,stop_time
    ,event_count
    ,max_files
    ,is_rowset
    ,is_rollover
    ,is_shutdown
    ,is_default
    ,buffer_count
    ,buffer_size as each_buffer_size
from sys.traces
where id=1

ca888会员登录 19ca888会员登录 20

 

SQL追踪(SQL Trace)是1个轻量级的寻踪工具,依据事件(伊芙nts)记录数据库发生的消息,差不多对数据库质量未有啥样震慑。SQL Server内置2个Trace,称作暗许追踪(Default Trace),默许追踪的ID是①,大家经常选取的SQL Server Profiler,正是运用SQL Trace记录数据库活动的一个工具。SQL Trace在SQL Server数据库引擎种出现的相比早,能够被质量和效应更独立的恢宏事件(Extended 伊芙nts)代替。

大家只必要将这一个剧本运营就足以,当然此段脚本,在实例重启的时候,全部的trace都会删除掉,能够将该段代码改成存款和储蓄进程,然后设置成实例运维的时候运营,

应用SQL Trace来完毕SQL Server的追踪操作

注:SQL Trace是被扩展事件代表的法力,在持续的本子上校会被移除,提议在后来的付出中使用扩张事件。

ca888会员登录 21

前言

假定暗中认可追踪已经启用,能够重新配置禁止使用暗中认可追踪:

 

咱俩定义追踪全体语句批量操作的跟踪,从上边表我们得以寻找到为1贰,一三

ca888会员登录 22

当然要是认为生成的文书5MB有点小,能够手动配置更动大小,或然自定义文件路线,那几个都以同意自定义设置的。

请关注本篇小说,让大家一起行使数据库的“追踪”(Trace)走进数据库背后,查看当中间原理。

参数filename:用于钦点追踪文件的名号,其值能够从系统视图sys.traces 中的path获取;

ca888会员登录 23

ca888会员登录 24

select categ.name as category,
    te.trace_event_id as event_id, 
    te.name as event_name,
    tc.trace_column_id as event_column_id,
    tc.name as column_name,
    tc.type_name as column_type
from sys.fn_trace_geteventinfo(1) as gei
inner join sys.trace_columns tc 
    on gei.columnid=tc.trace_column_id
inner join sys.trace_events te 
    on gei.eventid=te.trace_event_id
inner join sys.trace_categories categ
    on te.category_id=categ.category_id
order by category,event_id,event_column_id

ca888会员登录 25

自然,那里小编还能利用SQL Server自带的Profile工具,张开查看追踪文件中的内容。

 

DECLARE @Traced INT
EXEC sp_trace_create
@Traced OUTPUT,
@options=8
EXEC sp_trace_setstatus @Traced,1

ca888会员登录 26ca888会员登录 27

System Trace Functions.aspx)

第四个:当前追踪的情况:0 结束;1 周转

ca888会员登录 28

select te.trace_event_id as event_id, 
    te.name as event_name,
    tc.trace_column_id as column_id,
    tc.name as column_name,
    tc.type_name as column_type
from sys.trace_event_bindings teb 
inner join sys.trace_columns tc 
    on teb.trace_column_id=tc.trace_column_id
inner join sys.trace_events te 
    on teb.trace_event_id=te.trace_event_id
order by event_id,column_id

ca888会员登录 29

 

参数number_files:如果number_files 被钦定为default,函数读取全体的轮转文件。

第多个:追踪的停下时间,那里为Null,表示从没定点的告1段落时间

 

ca888会员登录 30

版权声明:本文由ca888发布于程序人生,转载请注明出处:SQL Server Extended 伊芙nts 进阶 一:从SQL Trace 到Ex