SQL Server 扩展事件(Extented Events)从入门到进阶(4)——扩展事件引擎——基本概念
本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列
在第一二节中,我们创建了一些简单的、类似典型SQL Trace的扩展事件会话。在此过程中,介绍了很多扩展事件基础组件,包括事件、谓词、操作和目标。本节,将对扩展事件引擎、架构和基本组件做更加深入的了解。通过这些讲解,可以大概了解到为什么扩展事件相对于SQL Trace来说更加低开销。另外,还会延时如何设计事件会话从而最小化事件收集过程中的不必要开销,即使这些事件会话会很复杂。
事件数据收集生命周期:
- 收集事件的基本负载数据。
- 评估谓词
- 如果谓词为True则收集对应操作。
- 直接分派事件数据到所有同步目标或者到中间内存缓冲区等待分派到异步目标。
- 最小化在默认负载(相对于Trace这种收集事件所有列而言)中收集的事件列数。
- 在事件数据采集之前使用谓词预先过滤掉不必要的数据。
- 通过先进的预聚合(pre-aggregating)可用性目标有时候可以显著降低引擎可能需要收集的数据总量。
扩展事件引擎基础架构:
模组和包(Modules and Packages):
SELECT [p].[name] AS [Module] ,[p].[description] AS [Description] ,[m].[name] AS [ModulePath]FROM [sys].[dm_xe_packages] [p]JOIN [sys].[dm_os_loaded_modules] [m]ON [p].[module_address] = [m].[base_address];GO
SELECT [xo].[name] AS [EventName] , [xo].[description] AS [EventDescription] , [xp].[name] AS [Package] FROM [sys].[dm_xe_objects] [xo] JOIN [sys].[dm_xe_packages] [xp] ON [xo].[package_guid] = [xp].[guid] WHERE [xo].[object_type] = N'event' ORDER BY [xo].[name]; GO
事件:
SELECT [object_name] AS [EventName] ,[name] AS [ElementName] ,[column_id] AS [ColumnID] ,[type_name] AS [ElementType] ,[column_type] AS [ColumnType] ,[capabilities_desc] AS [Capability] ,[description] AS [ElementDescription]FROM [sys].[dm_xe_object_columns]WHERE [object_name] = N'sql_statement_completed'AND [column_type] <> 'readonly';GO
操作:
SELECT [xp].[name] AS [Package] ,[xo].[name] AS [Action] ,[xo].[description] AS [Description]FROM [sys].[dm_xe_packages] AS [xp]JOIN [sys].[dm_xe_objects] AS [xo]ON [xp].[guid] = [xo].package_guidWHERE ( [xp].[capabilities] IS NULLOR [xp].[capabilities] & 1 = 0)AND ( [xo].[capabilities] IS NULLOR [xo].[capabilities] & 1 = 0)AND [xo].[object_type] = 'action';GO
谓词:
CREATE EVENT SESSION [MyEventSession] ON SERVERADD EVENT sqlserver.sp_statement_completed ( SET collect_object_name = ( 1 ) ,collect_statement = ( 1 )ACTION ( sqlserver.client_app_name, sqlserver.database_name )WHERE ( [logical_reads] >= ( 10000 ) ) );GO
SELECT [object_name] AS [Event], [name] AS [Column], [description] AS [Description] FROM [sys].[dm_xe_object_columns] WHERE [name] = 'duration' ORDER BY [object_name];
CREATE EVENT SESSION [MyEventSession] ON SERVER ADD EVENT sqlserver.sp_statement_completed ( SET collect_object_name = ( 1 ) , collect_statement = ( 1 ) ACTION ( sqlserver.client_app_name, sqlserver.database_name ) WHERE ( [sqlserver].[database_id] = ( 7 ) AND [logical_reads] >= ( 10000 ) AND [duration] >= ( 1000 ) ) ); GO
映射(Maps):
SELECT [xmv].[name] , [xmv].[map_key] , [xmv].[map_value] FROM sys.dm_xe_map_values [xmv] JOIN sys.dm_xe_packages [xp] ON [xmv].[object_package_guid] = [xp].[guid] WHERE [xmv].[name] = N'wait_types'; GO
CREATE EVENT SESSION [Capture WRITELOG Waits] ON SERVER ADD EVENT sqlos.wait_info ( WHERE ( ( [wait_type] = ( 181) ) AND ( [duration] >= ( 1000 ) ) ) ) ADD TARGET package0.event_file ( SET filename = N'C:\temp\WaitInfo' ); GO
目标:
- event_file:类似SQL Trace中的Trace文件的文件系统目标,在事件会话结束后固化到硬盘中。
- ring_buffer:使用FIFO(First In First Out,先进先出)算法,把数据驻留在内存存储中。
- event_counter:在内存中,每个事件会话中的事件出现频率数。
- histogram:在内存中的目标,产生一个关于事件发生的柱状图,关于所有常用事件的每个数据列或者操作,或者一个特定事件或者操作的一列的信息。
- pair_matching:在内存中,匹配目标的开始和结束事件,只保留没有配对的那些事件(比如有事务开始事件,没有事务结束事件)
event_file:
ring_buffer:
Event_counter:
Histogram:
这个目标在SQL 2008/2008R2中称为“bucketizer”,因为它基于选择的元素进行分组,比如你想知道为什么语句重编译,可以使用下面语句捕获:
CREATE EVENT SESSION [Capture WRITELOG Waits] ON SERVER ADD EVENT sqlos.wait_info ( WHERE ( ( [wait_type] = ( 181 ) ) AND ( [duration] >= ( 1000 ) ) ) ) ADD TARGET package0.event_file ( SET filename = N'C:\temp\WaitInfo' ); GO CREATE EVENT SESSION [TrackRecompiles] ON SERVER ADD EVENT sqlserver.sql_statement_recompile ( SET collect_object_name = ( 1 ) , collect_statement = ( 1 ) WHERE ( [sqlserver].[is_system] = ( 0 ) ) ) ADD TARGET package0.histogram ( SET filtering_event_name = N'sqlserver.sql_statement_recompile' , slots = ( 11 ) , source = N'recompile_cause' , source_type = ( 0 ) ) 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
Pair_matching:
CREATE EVENT SESSION [Find_Unmatched_Statements] ON SERVER ADD EVENT sqlserver.sql_statement_starting ( ACTION ( sqlserver.session_id, sqlserver.tsql_stack ) ), ADD EVENT sqlserver.sql_statement_completed ( ACTION ( sqlserver.session_id, sqlserver.tsql_stack ) ) ADD TARGET package0.pair_matching ( SET begin_event = N'sqlserver.sql_statement_starting' , begin_matching_actions = N'sqlserver.session_id, sqlserver.tsql_stack' , end_event = N'sqlserver.sql_statement_completed' , end_matching_actions = N'sqlserver.session_id, sqlserver.tsql_stack' , respond_to_memory_pressure = ( 0 ) ) 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
总结:
- 如非必要不要添加事件。
- 不要添加不必要的操作。
- 在谓词中使用短路逻辑最小化数据收集的开销,特别在收集大量事件,并且事件被频繁触发,或采集的事件本身就是高开销的。
- 根据目的选择必要的目标,并且考虑存储时效。
SQL Server 扩展事件(Extented Events)从入门到进阶(4)——扩展事件引擎——基本概念的更多相关文章
- 《SQL Server 2012 T-SQL基础》读书笔记 - 7.进阶查询
Chapter 7 Beyond the Fundamentals of Querying window function是什么呢?就是你SELECT出来一个结果集,然后对于每一行,你都想给它对应一个 ...
- SQL Server 扩展事件(Extented Events)从入门到进阶(1)——从SQL Trace到Extented Events
由于工作需要,决定深入研究SQL Server的扩展事件(Extended Events/xEvents),经过资料搜索,发现国外大牛的系列文章,作为“学习”阶段,我先翻译这系列文章,后续在工作中的心 ...
- SQL Server Extended Events 进阶 2:使用UI创建基本的事件会话
第一阶中我们描述了如何在Profiler中自定义一个Trace,并且让它运行在服务器端来创建一个Trace文件.然后我们通过Jonathan Kehayias的 sp_SQLskills_Conver ...
- 使用WinDbg调试SQL Server——入门
这篇文章我想探究下SQL Server里完全不同的领域:如果使用WinDbg(来自针对Windows的调试工具)调试SQL Server.在我们进入枯涩细节之前,我想详细解释下为什么选择这样晦涩的话题 ...
- 数据库技术丛书:SQL Server 2016 从入门到实战(视频教学版) PDF
1:书籍下载方式: SQL Server2016从入门到实战 PDF 下载 链接:https://pan.baidu.com/s/1sWZjdud4RosPyg8sUBaqsQ 密码:8z7w 学习 ...
- SQL Server Extended Events 进阶 1:从SQL Trace 到Extended Events
http://www.sqlservercentral.com/articles/Stairway+Series/134869/ SQL server 2008 中引入了Extended Events ...
- SQL Server 事件通知(Event notifications)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 基础知识(Rudimentary Knowledge) 事件通知监控DDL(NotifyQue ...
- SQL Server 2014里的缓存池扩展
在今天的文章里我想谈下SQL Server 2014里引入的缓存池扩展(Buffer Pool Extensions).我们都知道,在SQL Server里,缓存池是主要的内存消耗者.当你从你存储里读 ...
- 【转】Microsoft® SQL Server® 2012 Performance Dashboard Reports
http://www.cnblogs.com/shanyou/archive/2013/02/12/2910232.html SQL Server Performance Dashboard Repo ...
- [置顶] 图书推荐:SQL Server 2012 T-SQL基础 Itzik Ben-Gan
经过近三个月的不懈努力,终于翻译完毕了.图书虽然是基础知识,但是,即使你已经使用T-SQL几年,很多地方还是能够弥补你的知识空白.大师级的人物写基础知识,或许你想知道这基础中还有哪些深奥,敬请期待吧. ...
随机推荐
- PHP简单判断手机设备的方法
本文实例讲述了PHP简单判断手机设备的方法.分享给大家供大家参考,具体如下: 现在移动互联网越来越发到,很多的网站都普及了手机端浏览,为了更好的让网页在手机端显示,我们都选择了使用CSS媒体查询制作响 ...
- php怎么返回json格式的数据
- C++ 类模板与模板类详解
在C++的Template中很多地方都用到了typename与class这两个关键字,有时候这两者可以替换,那么这两个关键字是否完全一样呢? 事实上class用于定义类,在模板引入c++后,最初定义模 ...
- java同时连接db2和mysql的程序
db2的jar包安装参见:http://www.cnblogs.com/zifeiy/p/7918554.html 代码: package com.anbank.datafetch; import j ...
- Git -> Can't start Git: git.exe
问题描述 导入别人的PyCharm项目后提示:Can't start Git:git.exe 解决办法 Git就是个类似插件,在Git的官网上注册个账号然后每次编译就会自动把程序上传到网上备份.可以方 ...
- [LeetCode] Coin Change 2 硬币找零之二
You are given coins of different denominations and a total amount of money. Write a function to comp ...
- Spring MVC 知识点记忆
1.Dao 用的 @Repository 2.Handler 用的 @Controller 3. @Autowired 消除了对get set方法 4. @RequestMapping(value= ...
- centOS7配置DNS服务器
世上无难事只怕有心人,遇事千万千万不要抵触,消极的情绪是失败之母,一点一滴,踏踏实实是通往幸福的捷径. 历经激动,受挫,抵触和鼓励以及征服,终于配好了让我欢喜让我忧的dns.在这里记录下来,希望能够给 ...
- [SDOI 2009]Elaxia的路线
Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间, ...
- [CQOI2013]棋盘游戏
Description 一个n*n(n>=2)棋盘上有黑白棋子各一枚.游戏者A和B轮流移动棋子,A先走. A的移动规则:只能移动白棋子.可以往上下左右四个方向之一移动一格. B的移动规则:只能移 ...