資料庫死鎖

2021-10-24 16:17:43 字數 865 閱讀 1523

產生死鎖的條件:

這四個條件都是產生死鎖的必要條件。只要上述條件之一不滿足,就不會發生死鎖

例子

1. 事務之間對資源訪問順序的交替

事務a鎖住了記錄1並等待記錄2,事務b鎖住了記錄2並等待記錄1,這樣兩個事務就發生了死鎖。解決:盡量按照相同順序來鎖定資源

2. 併發修改同一記錄

事務a想執行update語句:update accounts set balance=900 where id=1,事務a需要先讀取表中id為1的記錄再執行更新操作,鎖從共享鎖上公升為排他鎖;如果在事務a獲得共享鎖時,有另乙個事務也獲得了id為1的記錄的共享鎖,也要把共享鎖上公升為排他鎖,就造成了死鎖。

解決:悲觀鎖或樂觀鎖;sqlserver支援更新鎖

更新鎖

u鎖,發生在更新語句中,更新鎖用來查詢資料,當查詢的資料不是更新的資料時轉化為s鎖,當是要更新的資料時轉化為x鎖。

對於相同一條資料,只有乙個事務可以獲得更新鎖,其他事務需要等待,也就是其他事務不可以執行update語句,避免了死鎖情況。

3. 索引不當導致全表掃瞄

如果在事務中執行了一條不滿足條件的語句,執行全表掃瞄,把行級鎖上公升為表級鎖,多個這樣的事務執行後,就很容易產生死鎖和阻塞

減少死鎖的方法

保持事務在乙個批處理中,可以最小化事務的網路通訊往返量,減少完成事務可能的延遲並釋放鎖。

死鎖檢測 參考

資料庫常見死鎖原因及處理

資料庫死鎖及解決死鎖問題

再談mysql鎖機制及原理—鎖的詮釋

資料庫死鎖

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

資料庫死鎖

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

資料庫死鎖

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