2016-07-16 101 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