今天我們來看死鎖,死鎖的一般場景大家都能想到,只要你不是很菜,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 公司開...