欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【简要介绍SQL Server 2008新的事件处理系统】,下面是详细的分享!
简要介绍SQL Server 2008新的事件处理系统
SQL Server Extended Events(下面简称XEvent)是SQL Server 2008里新加的事件处理系统,用来取代SQL Server原先的SQL Trace的跟踪机制。事件处理系统对一个复杂服务器系统的排错,调试是极为关键的。和SQL Server原来的事件处理系统相比较,XEvent具有下列的优势:
消耗更少的系统资源,更适用于在产品服务器上的排错和调试。并且每收集一个系统事件所消耗的资源都是可预测的。
- 不仅仅能收集事件数据,还能收集在这事件触发点的系统动态运行信息,例如内存,T-SQL Stack等等。
- 可配置性,能够根据系统负载的需求配置所需收集的事件信息。
- 下面是一个简单的例子介绍如何使用XEvent来做系统排错工作。
当前台应用性能下降的时候,数据库管理员经常需要确定是否有资源锁的申请冲突,既所谓我们说的blocking。在SQL Server 2008里面,你可以查询系统视图sys.dm_exec_requests,并且能发现有一些进程正在等待资源锁,比如像下面这个结果:
我们可以看到有个Session 54的状态是Suspended,意味着一个查询的操作被blocked, 但是我们看不到是哪一个Query占用了资源,以及查询计划和T-SQL Stack等等,如果我有下面的XEvent Session我们就能够解决这个问题。(在下面的例子中我们假设XEvent Session在Block发生之前已经启动好了)
1、在查询编辑器执行下面的命令,这会创建一个XEvent Session来捕捉lock_acquired和lock_released,同时我们还会抓下sql_text,tsql_stack和plan_handle等信息。
-- Perform cleanup. IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='FindBlockers') DROP EVENT SESSION FindBlockers ON SERVER GO -- 我们这边假设是数据库”DAA”里出了block,所以我们会使用一个predicate去过滤掉其他数据库的Block问题 -- DECLARE @dbid int SELECT @dbid=db_id('DAA') |
2、一旦XEVENT然后我们可以执行下面的语句去找到那些block了别人的查询语句:
-- -- The pair matching targets report current unpaired events using -- the sys.dm_xe_session_targets dynamic management view (DMV) -- in XML format. -- The following query retrieves the data from the DMV and stores -- key data in a temporary table to speed subsequent access and -- retrieval. -- SELECT objlocks.value('(action/value)[5]', 'int') AS session_id, objlocks.value('(data/value)[5]', 'int') AS database_id, objlocks.value('(data/text)[1]', 'nvarchar(50)' ) AS resource_type, objlocks.value('(data/value)[9]', 'bigint') AS resource_0, objlocks.value('(data/value)[10]', 'bigint') AS resource_1, objlocks.value('(data/value)[11]', 'bigint') AS resource_2, objlocks.value('(data/text)[2]', 'nvarchar(50)') AS mode, objlocks.value('(action/value)[1]', 'varchar(MAX)') AS sql_text, CAST(objlocks.value('(action/value)[4]', 'varchar(MAX)') AS xml) AS plan_handle, CAST(objlocks.value('(action/value)[3]', 'varchar(MAX)') AS xml) AS tsql_stack INTO #unmatched_locks FROM ( SELECT CAST(xest.target_data as xml) lockinfo FROM sys.dm_xe_session_targets xest JOIN sys.dm_xe_sessions xes ON xes.address=xest.event_session_address WHERE xest.target_name='pair_matching' AND xes.name='FindBlockers' ) heldlocks CROSS APPLY lockinfo.nodes('//event[@name="lock_acquired"]') AS T(objlocks) -- -- Join the data acquired from the pairing target with other -- DMVs to return provide additional information about blockers -- SELECT ul.* FROM #unmatched_locks ul INNER JOIN sys.dm_tran_locks tl ON ul.database_id=tl.resource_database_id AND ul.resource_type=tl.resource_type WHERE resource_0 IS NOT NULL AND session_id IN (SELECT blocking_session_id FROM sys.dm_exec_requests WHERE blocking_session_id !=0) AND tl.request_status='wait' |
上面的语句返回下面的结果,我们可以看到是一个Session 53的Update更新语句Block了Session 54的查询:

有下面sql_text里可以看到,整个更新语句begin tran Update BlockTest set Col1 = 'Updated' where ID = 1中,由于少了一个Commit tran,所以block了其他查询对表BlockTest的操作,
![]()
以上所分享的是关于简要介绍SQL Server 2008新的事件处理系统,下面是编辑为你推荐的有价值的用户互动:
相关问题:简要描述在选择安装不同版本的SQL Server 2008时的...
答:1、SQL Server 2008企业版是一个全面的数据管理和业务智能平台,为你提供更加坚固的服务器和执行大规模在线事务处理。这个是最牛B的版本。 2、SQL Server 2008标准版是一个完整的数据管理和业务智能平台,为部门级应用提供了最佳的易用性和可管... >>详细
相关问题:SQLServer2008新特性
答:1.在注册的服务器组中一次SQL查询可以针对多个服务器执行。 首先是要在“已注册的服务器”中创建组,也可以使用系统默认的组,然后添加多个数据库到组中。接下来右击数据库组,选择“新建查询”选项,系统将打开一个多数据库查询的编辑器,选择多个... >>详细
相关问题:sql server2008的组件主要是哪些
答:SQL Server 2008系统由4个主要部分组成,这4个部分被称为4个服务,分别是上面的数据引擎、分析服务、报表服务和集成服务。这些服务之间相互依存。 方法/步骤 数据库引擎 数据库引擎是(SQL Server Database Engine,SSDE)是SQL Server 2008系统... >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
