1

儘管事實上我們並沒有使用事務,但我們從SQL Azure獲得了隨機死鎖錯誤。沒有事務的Azure SQL數據庫上的DeadLock

當SQL Azure可能陷入僵局時,沒有跨國情況嗎?

看起來好像當我們運行一批UPDATE查詢時,它的行爲就像批處理是一個大事務。

所有的更新都是通過id來更新一行。

+1

我不認爲不使用交易將降低死鎖的風險。我想你應該提供更多的細節。 –

+0

非事務並行查詢如何進入死鎖? –

回答

6

沒有「不使用交易」這樣的事情。總是有一個交易,你是否明確地開始交易。有關如何獲取SQL Azure中的死鎖圖的內容,請閱讀Tracking down Deadlocks in SQL Database。連接到master並運行:

SELECT * FROM sys.event_log 
WHERE database_name like '<your db name>' 
AND event_type = 'deadlock'; 

然後分析死鎖圖做明白原因。由於缺少索引,您很可能正在進行掃描。

+0

您也可以在答案中包含鎖。這實際上是造成死鎖的原因。表格提示(WITH NOLOCK)將解決大多數問題(和READ UNCOMMITED)。 https://msdn.microsoft.com/en-us/library/ms187373.aspx –

+0

@RicardoC不,髒讀絕對不是答案。 [髒讀返回不正確的數據](http://blogs.msdn.com/b/sqlcat/archive/2007/02/01/previously-committed-rows-might-be-missed-if-nolock-hint-is- used.aspx)。 –

+0

@RicardoC如果你想消除死鎖而不理解原因使用快照隔離。例如。閱讀[Deadlocked!](http://blog.codinghorror.com/deadlocked/) –

2

當您有併發事務運行(隱式或顯式)時,您會遇到死鎖。可能當你說你沒有交易意味着你的交易是隱含的。

+0

如何通過ID批量更新一次可能導致死鎖? SQL Azure是否將一批更新作爲隱式事務運行? –

相關問題