2014-03-19 66 views
0

我有一個SQL Sever 2008 R2數據庫安裝程序和一個每小時運行一次查詢(大約需要3分鐘運行)的查詢。該查詢用其結果填充臨時表。複製SQL Server數據庫死鎖查詢受害者

然而,每隔一段時間我得到這個錯誤:

Transaction (Process ID 63) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. [SQLSTATE 40001] (Error 1205)

這將停止正在運行的查詢。

處理此錯誤的最佳做法是什麼?

在此先感謝。

exec sp_executesql N'EXECUTE msdb.dbo.sp_sqlagent_log_jobhistory @job_id = @P1, @step_id = @P2, @sql_message_id = @P3, @sql_severity = @P4, @run_status = @P5, @run_date = @P6, @run_time = @P7, @run_duration = @P8, @operator_id_emailed = @P9, @operator_id_netsent = @P10, @operator_id_paged = @P11, @retries_attempted = @P12, @session_id = @P13, @message = @P14',N'@P1 uniqueidentifier,@P2 int,@P3 int,@P4 int,@P5 int,@P6 int,@P7 int,@P8 int,@P9 int,@P10 int,@P11 int,@P12 int,@P13 int,@P14 nvarchar(4000)','0A7AFD76-D2EC-463E-A802-8B66241B0D26',2,8153,13,0,20140320,110114,219,0,0,0,0,52,N'Executed as user: DOMAIN\sql. Transaction (Process ID 62) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. [SQLSTATE 40001] (Error 1205) Warning: Null value is eliminated by an aggregate or other SET operation. [SQLSTATE 01003] (Error 8153). The step failed.'

上面是返回表單分析器。

+0

是否有任何其他的工作修改您的查詢訪問表? –

+0

@ shree.pat18我可以建議的唯一事情是複製本身? – LaLa

回答

2

您需要調查造成死鎖的原因。解決方案將完全取決於您找到的內容。

注意,如果你掃描一個表,而被更新死鎖是非常:關於這個問題的一些讀 l ikely。對複製代理主動修改的數據進行「3分鐘」查詢可能就是這種情況。理想情況下,您的查詢應該優化爲僅讀取相關數據(例如自上次讀取後發生了什麼變化)。出一個廉價的方式就是啓用版本的數據庫,閱讀Implementing Snapshot or Read Committed Snapshot Isolation in SQL Server: A Guide

ALTER DATABASE <dbname> SET READ_COMMITTED_SNAPSHOT ON; 
+0

Im 99%肯定它是複製,我沒有提到的是死鎖發生在訂閱數據庫而不是發佈者(我不知道這是否有幫助)。 – LaLa

+1

完全不相關。僵局是死鎖是僵局。閱讀鏈接的文章。捕獲死鎖圖。 –

+0

我已編輯原始帖子,更多信息。 – LaLa