衆所周知,有兩種鎖定策略:Optimistic vs. Pessimistic locking使用樂觀鎖定時可能會出現死鎖嗎?
悲觀鎖定是,當你鎖定該記錄爲您獨家使用 ,直到你完成它。它比 樂觀鎖定具有更好的完整性,但要求您注意應用程序設計以避免Deadlocks。
而且knonw,即Optimistic Concurrency Control是不一樣的Multi Version Concurrency Control(Oracle或MSSQL快照/ MVCC-RC):Optimistic vs Multi Version Concurrency Control - Differences?
但是,如果在這兩個使用OCC(Optimistic Concurrency Control)兩筆交易之間可以發生死鎖?
我們可以說樂觀鎖定通過降低一致性來減少死鎖的可能性嗎?只有每次更新都在單獨的事務中,那麼死鎖的可能性爲0%,但這是最小的一致性。
謝謝!因此Oracle數據庫永遠不會升級鎖。鎖定升級大大增加了死鎖的可能性。這是否意味着死鎖是多版本併發的另一個差異樂觀併發?但目前,在完成樂觀併發時 - 讀取 - 檢查 - 修改行時,我們是否使用鎖定?或者每次交易只能有一個鎖定,所以不能成爲死鎖。 – Alex
@亞歷山大 - 我不確定我是否瞭解跟進。爲了更新一行,你必須鎖定它。樂觀和悲觀鎖定之間的區別在於,您是否悲觀地鎖定行以防萬一您可能會更新它,或者樂觀地等待,直到您知道要更新它以獲取鎖定。您可以編寫一個應用程序,將每次更新作爲單獨的事務處理。這樣可以減少死鎖,但對於數據一致性來說會很糟糕。 –
是的,謝謝,這就是我想知道的。我們可以說樂觀鎖定通過降低一致性來減少死鎖的可能性嗎?只有在單獨事務中的每次更新時,死鎖的可能性都是0%,但這是最小的一致性。使用一定數量的樂觀方法,我們可以在死鎖和一致性之間取得必要的平衡。 – Alex