2016-08-03 104 views
1

感謝您花時間閱讀我的問題。我們已經構建了一個使用T-SQL的系統來處理(大量)數據。當我們開始處理這些數據時,此操作通常需要大約15分鐘才能完成。在此期間,出於某種原因,似乎數據庫中的所有對象都存在鎖定。在某種程度上,我明白我無法查詢正在寫入的表。但是,當我刷新表的列表(例如,在對象資源管理器的Tables節點上使用F5)時,SQL Server也會給我一個超時鎖定消息。基於下面的模板SQL Server Large Transaction鎖定所有表格

我的代碼工作:

CREATE PROCEDURE Sample 

as 

SET NOCOUNT, XACT_ABORT ON 

BEGIN TRY 

BEGIN TRANSACTION 

... 

COMMIT TRANSACTION 

END TRY 

BEGIN CATCH 
    BEGIN 
     PRINT 'STORED PROCEDURE - Returned errors while processing' 
     ROLLBACK TRANSACTION 
    END 
END CATCH 

現在,當我開始這個我可以執行SELECT WITH(NOLOCK)查詢任何表。但我無法查看視圖上的定義,存儲過程或基本上在數據庫中執行任何其他類型的操作。

我已經設置了READ UNCOMMITTED隔離級別設置,但這似乎沒有什麼區別。

欣賞此事的任何幫助。

親切的問候,

+0

隔離級別會影響報表如何選擇工作,這些都不會影響DDL,DML..Locking,填塊是大主題,所以請有關如何解決鎖定的阻塞搜索並從那裏開始 – TheGameiswar

回答

0

是在try catch塊中的代碼進行數據更新的一個很大的數目。更改隔離級別不會解決鎖定問題。

什麼是最適合你的是做這些基本的檢查/修改:

  • 嘗試劃分更新/插入較小的批處理;事情會更順利地減少鎖定。
  • 檢查參與更新查詢(ies)的表的索引,以便返回數據更快。
0

這個問題與隔離級別無關,它是Exclusive的問題。

這是數據庫級鎖Escalation的情況。

避免升級做小批量交易...