SQL Server Extended Events使用2:查询使用锁最多的对象

当我们怀疑可能存在高度争用的资源,并希望了解这些对象占用多少锁定。一旦识别锁定频率最高的对象,便可采取一些措施来优化对争用对象的访问。使用SQL Server Extended Events可以帮助我们获得对象使用的锁资源。

 

--先删除LockCounts Event Session

IF EXISTS(SELECT* FROM sys.server_event_sessionsWHEREname='LockCounts')

DROP EVENT sessionLockCounts ON SERVER

GO

DECLARE @dbid int

 

SELECT @dbid =db_id('AdventureWorks')

 

DECLARE @sql nvarchar(1024)

SET @sql = '

CREATE eventsession LockCounts ON SERVER

ADD EVENTsqlserver.lock_acquired (WHERE database_id ='+CAST(@dbidAS nvarchar)+')

ADD TARGETpackage0.synchronous_bucketizer (

SETfiltering_event_name=''sqlserver.lock_acquired'', source_type=0,source=''resource_0'')'

 

EXEC (@sql)

GO

ALTER EVENT sessionLockCounts ON SERVER

STATE=start

GO

--

-- Create asimple workload that takes locks.

--

USEAdventureWorks

GO

SELECT TOP 1 * FROM HumanResources.Department

GO

-- Bucketizingtarget output is available from the

--sys.dm_xe_session_targets dynamic management view in

-- XML format.

-- The followingquery joins the bucketizing target output with

-- sys.objectsto obtain the object names.

--

SELECT name, object_id, lock_count FROM

(SELECT objstats.value('.','bigint')AS lobject_id,

objstats.value('@count','bigint') AS lock_count

FROM (

SELECT CAST(xest.target_dataAS XML)

LockData

FROM sys.dm_xe_session_targets xest

JOIN sys.dm_xe_sessions xesONxes.address= xest.event_session_address

JOIN sys.server_event_sessions sesONxes.name = ses.name

WHERE xest.target_name= 'synchronous_bucketizer'ANDxes.name = 'LockCounts'

) Locks

CROSS APPLY LockData.nodes('//BucketizerTarget/Slot')AS T(objstats)

 )LockedObjects

INNER JOIN sys.objects o

ONLockedObjects.lobject_id= o.object_id

WHERE o.type!= 'S' AND o.type= 'U'

ORDER BY lock_countdesc

GO

--

结果:

 

name         object_id   lock_count

-------------------------------

Department    805577908                                                                                                          

 

(1 row(s) affected)

 

-- Stop theevent session.

--

ALTER EVENT SESSIONLockCounts ON SERVER

state=stop

GO

 

--Drop the eventsession

DROP EVENT SESSIONLockCounts ON SERVER

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值