2016-07-16 41 views
0

我们有一个新的sp获取发布,在测试过程中我们发现它运行阻塞其他OLTP事务时。我们发现最初是因为新的sp导致了表上的锁升级,我们减少了批量大小,并且能够避免这种情况。即使在避免锁定升级之后,它仍然阻止正在进入的oltp事务。我认为它锁定了oltp事务正在更新的同一行。跟踪锁定的最佳方式 - SQL Server

我需要找到一种方法来跟踪所有新的sp保存和释放的锁。我试过trace/xevents(锁获得/释放),它看起来并不像捕获所有的锁,可能是因为它发生得太快。

为了理解如何获得锁看起来像,我通过做一个选择*从atable测试它。但它给了我不同的结果。当我们选择*它没有放置一系列页面锁,所以我应该看到跟踪中的共享页锁。但我看到的只有IS锁获得和释放。

跟踪给定事务的所有锁定的最佳方式是什么?

+0

扩展事件应该有caug它。你可以用会话定义更新你的文章吗? –

回答

1

我跑下面的查询上一个会话

begin tran 
update orderstst 
set unitprice=unitprice+1 
waitfor delay '00:00:20' 

及以下DMV运行查询是在其他会话中运行,而..

select resource_database_id,request_mode,request_type,request_status,txt.text 
from sys.dm_tran_locks lck 
join 
sys.dm_exec_requests ec 
on ec.session_id=lck.request_session_id 
    cross apply 
    sys.dm_exec_Sql_text(ec.sql_handle) txt 

我得到了以下数据...

enter image description here

当事务仍然没有提交,但完成,我跑了以上dmv again.but没有得到任何output.since目前没有执行。

但低于DMV运行,仍然会给我锁保持,您将能够识别哪个会话locks..so所有会话的信息持有更多的锁

select resource_database_id,request_mode,request_type,request_status 
from sys.dm_tran_locks lck 
join 
sys.dm_exec_sessions ec 
on ec.session_id=lck.request_session_id 

上述查询给我下面的信息..

enter image description here

因此,在总结,你必须运行DMV1或DMV2通过SQL代理工作一段时间,并插入一些表后..江苏实际

进一步从SQL 2012,您还可以使用扩展事件..

转到管理 - >扩展事件,右键单击并说,启动新会话向导。

给它一个名称,并在服务器启动时

enter image description here

下一个屏幕为您提供了一个选项,选择默认模板或不检查开始,我选择如下图所示,点击旁边的锁默认模板..

enter image description here

在下一屏幕,你可以选择不同的事件,在通道中,选择所有通道,并做相同的范畴也和选择INTERES事件t,我选择下面..

enter image description here

在这个画面中,您可以选择的操作,我选择文本,会话ID

enter image description here

在下一屏幕,过滤器就像说,例如..gather活动仅适用于像数据库名称'somename' 或查询像一些文字..

enter image description here

下一页屏幕中,您可以存盘供以后分析..

enter image description here

屏幕的完整的休息,最后选择开始事件会话立即选项..

当你与收集的数据进行,去扩展事件和阻止你created.Right单击会话,并说视图目标data..which显示了以下screenn

enter image description here

+0

不幸的是,OLTP应用程序非常敏感,对于某些事务,响应时间必须小于200ms。所以阻塞很短,并导致交易运行大约400-800ms。所以不幸的是,预定的工作可能会错过确切的时刻..这就是为什么我试图分析确切的锁和事实上被阻止的行。 我想知道我是否可以调整xevents中的一些设置来捕获所有获取的锁。我正在试验xe – jesijesi

+0

你使用的是2012?事务如何运行或完成是否少于800 ms影响? – TheGameiswar

+0

嗨,我们正在使用2014.应用程序(财务)有一个严格的sla。所以作为它的一部分,db上的这些事务不应超过200ms。 – jesijesi

相关问题