資料庫update死鎖

2021-09-06 23:17:05 字數 631 閱讀 3377

比較常見的死鎖場景,併發批量update時的乙個場景:

update

cross_marketing

set gmtmodified =

now(),

pageview

= pageview+

#extpageview#

where marketingid=#marketingid#

第一次呼叫時,marketingid傳入值順序: 1,

3,5,12

第二次呼叫時,marketingid傳入值順序:1,2,5,3

每次update時,會鎖行。(一次批量操作為乙個事務)

那麼第一次呼叫時,順序鎖行,當更新完3,準備更新5的時候,發現5已經被第二次呼叫鎖行了,就等待。而此時的第二次呼叫剛好更新完5準備去拿3的鎖,卻發現被第一次呼叫占有,於是就出現死鎖。

所以,我們要在批量更新,更新操作的時候,按照乙個固定的順序來排序,然後進行操作。

前面的例子,如果按照marketingid從小到大排序,就會變成:

第一次呼叫時,marketingid傳入值順序: 1,3,5,12

第二次呼叫時,marketingid傳入值順序:1,2,3,5

如此,就避免了死鎖的發生。

資料庫死鎖

1.死鎖的概念 死鎖是程序死鎖的簡稱,是由dijkstra於1965年研究銀行家演算法時首先提出來的。它是計算機作業系統乃至併發程式設計中最難處理的問題之一。實際上,死鎖問題不僅在計算機系統中存在,在我們日常生活中它也廣泛存在。我們先看看這樣乙個生活中的例子 在一條河上有一座橋,橋面較窄,只能容納一...

資料庫死鎖

資料庫在進行insert,update,delete這些更新操作的時候為了保證資料一致性都會使用排他鎖。乙個事務裡進行update操作,在事務結束之前 commit or rollback 排他鎖不會被釋放。因此在乙個事務裡update多條資料的時候執行順序就尤為重要,兩個併發事務中更新操作的執行順...

資料庫死鎖

死鎖 所謂死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去.此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序 由於資源占用是互斥的,當某個程序提出申請資源後,使得有關程序在無外力協助下,永遠分配不到必需的...