MySQL事物本質 事務的本質和死鎖的原理 改

2021-10-17 22:55:11 字數 1933 閱讀 6020

前言、事務方塊

在我的理解,事務是這個形狀的

x軸是可以鎖定的資源,y軸是函式執行時間, 事務隨著時間的流逝向下降落, 當恰好與x軸接觸時資源被鎖定,當恰好不再與x軸接觸時資源解除鎖定,這裡的耗時五秒是誇張的寫法,通常情況下單位是毫秒級甚至微妙級,這裡使用秒作為單位是為了凸顯現象 上圖是函式a的事務形狀,命名【 事務方塊】,

@transactional

public void a()

一、多事務

當乙個函式呼叫多個子函式且都是被事務註解的函式時情況是

上圖是對於函式abc呼叫時,a函式、b函式、c函式的事務形狀

public void abc()

this.b(){}

this.c(){}

@transactional

public void a()

@transactional

public void b()

@transactional

public void c()

當abc函式開始執行時,先呼叫a函式,先鎖定a表, 當a函式結束執行,a表解鎖,同時b函式開始執行,b表鎖定, 當b函式結束執行,b表解鎖,同時c函式開始執行,c表鎖定。 相當於下圖的三個事務方塊聯合且相對位置固定一起下落,總耗時十五秒

如果併發請求兩次abc函式,事務方塊如圖

其中a表先被請求一鎖定五秒後解鎖,再馬上被請求二鎖定五秒, 其中b表也先被請求一鎖定五秒後解鎖,再馬上被請求二鎖定五秒, 其中c表也先被請求一鎖定五秒後解鎖,再馬上被請求二鎖定五秒, 而請求一在解鎖表a後緊接著又鎖定了表b五秒,同時表a再被請求二鎖定五秒 依此類推,請求二都在請求一解鎖對應的表後鎖定該錶, 那麼總執行時間二十秒

二、大事務

@transactional

function abc()

this.b(){}

this.c(){}

public void a()

public void b()

public void c()

其中abc函式有註解,而子函式a、b、c沒有註解,事務形狀如圖

a、b、c三個顏色的方塊是結合在一起的,必須一起執行,實際上就是事務原子性的表象,那麼a表被鎖定十五秒,b表被鎖定十秒,c表被鎖定五秒 若也同時併發兩次abc函式則總耗時三十秒,容易發現事務越大,耗時越長;本來在多事務時被鎖定五秒的a表,被鎖定了十五秒。 在這個abc函式中,事務對錶的鎖定是懶鎖定的情況, 就是說,當abc函式中 a函式開始執行時,只鎖定了a表,當a函式執行完成, b函式開始執行鎖定b表,此時不解鎖a表,當b函式執行完成, c函式開始執行鎖定c表,此時不解鎖a、b兩個表,當c函式執行完成,同時解鎖a、b、c三個表。 這就導致了死鎖的出現

三、死鎖

有如下兩個函式ab和ba

@transactional

public void ab()

this.b(){}

@transactional

public void ba()

this.a(){}

當ab和ba函式同時被執行時,事務方塊類似下圖,但不完全

當ab和ba函式同時被執行時,ab鎖定a表,ba鎖定b表, 當ab執行完a函式請求鎖定b表時,ba也執行完了b函式請求鎖定a表, 但ab沒有解開對a表的鎖定,ba也沒有解開對b表的鎖定,那麼相互等待對方解鎖,這就是死鎖。 所以減少死鎖出現的機率的辦法是減小事務方塊的大小,即減小事務方塊消耗的時間或減小事務方塊鎖定的資源【表或行】 所以行級鎖不易出現死鎖,表級鎖易出現死鎖,是因為行級鎖事務方塊小,但消耗時間不一定,還是需要參考事務消耗時間。 當表的主鍵是整型的自增id時,則相當於把事務可鎖定資源從乙個資源【表】分割成了2147483647份的資源【行】,可見使用行級鎖時事務方塊明顯變小。

四、名稱來歷

事務方塊的名字來歷是一次研究死鎖時聯想到俄羅斯方塊,俄羅斯方塊是為了找乙個位置放置方塊,而事務方塊是為了找乙個時空縫隙讓方塊執行通過,目的不同。

【網路侵刪】

mysql事務本質 資料庫事務的本質

事務的本質 redo log 重做日誌,儲存sql語句到乙個指定的log檔案,先到logbuffer,然後commit或一定條件滿足後刷到磁碟 undo log 回滾日誌,將當前要修改的行內容複製到undobuffer,滿足一定條件後刷到磁碟,儲存在資料檔案中 修改一行資料 先用排他鎖鎖定該行,記錄...

mysql事務本質 MySQL基礎事務

事務的用法 l 開啟事務 start transaction l 執行sql操作 普通sql操作 l 提交 回滾 commit rollback 注意 l 建表的時候,選擇 innodb引擎才支援事務 l 預設情況下,mysql是自動提交事務,每次執行乙個 sql 語句時,如果執行成功,就會向資料庫...

事物的本質和數學的關係

抽象事物 形容詞 抽象事物 動詞 以下這兩句話是等同的 組合使得事物之間產生各種關係,而關係由事物之間的互動 動作 維持,這樣子 名詞 形容詞和動詞組成了我們的世界。關於事物的分割和組合,會產生以下的疑問 這兩個問題的答案是人類一直在追溯的東西。所有其它類似的疑問將最終歸結於以上兩個問題。數學反映了...