Mysql InnoDB儲存引擎中 死鎖

2021-08-20 08:16:40 字數 944 閱讀 6906

今天我們來看死鎖,死鎖的一般場景大家都能想到,只要你不是很菜,a獲取資源z之後再獲取資源x,b獲取資源x之後再獲取資源z,這樣就造成了死鎖。

解釋:

死鎖是指兩個或兩個以上的事務在執行過程中,因爭奪鎖資源而造成的一種互相等待的現象。

解決辦法:

1.超時。

innodb中設定了超時時間,引數為innodb_lock_wait_timeout。

2.wait-for graph(等待圖)

由於超時機制雖然簡單,但是僅僅通過超時後對事務進行回滾,或者根據fifo的順序來選擇回滾物件。如果此時回滾的事務佔權過大,反而不合時宜。因此採用等待圖來檢測死鎖,這是一種更為主動的死鎖檢測方式。innodb也採用的這種方式。

wait-for graph中儲存了兩種資料:

2.1 鎖的資訊鍊錶

2.2 事務等待鍊錶

通過鍊錶可以構造出一張圖,如果圖中存在迴路,代表出現死鎖。

圖的指向定義為:t1指向t2表名,t1等待事務t2所占用的資源或者事務t1最終等待t2所占用的資源。

t2對row1占用x鎖,事務t1對row2占用s鎖,事務t1需要等待事務t2中row1的資源,事務t2需要等待t1,t4占用的row2的資源。在形成的迴路中t1和t2之間存在迴路,因此造成了死鎖。

樣例:

死鎖類似問題後續補充....

mysql InnoDB儲存引擎

innodb的組成部分 1.後台執行緒 2.儲存引擎記憶體池 innodb儲存引擎記憶體緩衝池 1.記憶體緩衝池 innodb是基於磁碟儲存的,並將其中的記錄按照頁的方式進行管理。因此,可將其視為基礎磁碟的資料庫系統。在資料庫系統中,由於cpu速度與磁碟速度之間的紅狗,基於磁碟的資料庫系統通常使用緩...

Mysql Innodb儲存引擎

鎖 參考資料 參考資料 行鎖 innodb的鎖是對索引加鎖,如果查詢到並沒有用到索引就會對錶進行加鎖 record lock 對單條記錄加上鎖 gap lock 間隙鎖,鎖定乙個範圍,但是不包含記錄本身 next key lock record lock gap lock,鎖定乙個方位並鎖定記錄本身...

MYSQL INNODB 儲存引擎

innodb 是事務安全的mysql儲存引擎,設計上採用了類似於oracle的架構。一般而言,在oltp的應用中,innodb應該作為核心應用表的首選儲存引擎。同時,也是因為innodb的存在,才使得mysql變得更有魅力。第一 innodb儲存引擎概述 innodb由innobase oy 公司開...