18 MySQL加鎖處理分析

2021-06-20 16:48:37 字數 1175 閱讀 3792

by何登成

by何登成(這篇部落格提到了乙個無比微妙的死鎖情況,涉及innodb死鎖預防。)

這篇文章從乙個簡單的sql語句delete from t1 where id = 10;,分析在各種情況下的加鎖情況。以下為這篇文章的目錄,感謝何博士的分享。

1    背景    1

1.1    mvcc:snapshot read vs current read    2

1.2    cluster index:聚簇索引    3

1.3    2pl:two-phase locking    3

1.4    isolation level    4

2    一條簡單sql的加鎖實現分析    5

2.1    組合一:id主鍵+rc    6記錄x鎖

2.2    組合二:id唯一索引+rc    6唯一索引x鎖+對應記錄x鎖

2.3    組合三:id非唯一索引+rc    7多個(索引x鎖+對應記錄x鎖)

2.4    組合四:id無索引+rc    8全記錄x鎖

2.5    組合五:id主鍵+rr    9記錄x鎖

2.6    組合六:id唯一索引+rr    9唯一索引x鎖+對應記錄x鎖

2.7    組合七:id非唯一索引+rr    9多個(索引x鎖+對應記錄x鎖)+多個索引gap鎖

2.8    組合八:id無索引+rr    11   全紀錄x鎖,全gap鎖

2.9    組合九:serializable    12mvcc降級為lock-based併發控制

3    一條複雜的sql    12

4    死鎖原理與分析    14

5    總結    16

總結部分:

1、了解資料庫的一些基本理論知識:資料的儲存格式 (堆組織表 vs 聚簇索引表);併發控制協議 (mvcc vs lock-based cc);two-phase locking;資料庫的隔離級別定義 (isolation level);

2、了解sql本身的執行計畫 (主鍵掃瞄 vs 唯一鍵掃瞄 vs 範圍掃瞄 vs 全表掃瞄);

3、了解資料庫本身的一些實現細節 (過濾條件提取;index condition pushdown;semi-consistent read);

4、了解死鎖產生的原因及分析的方法 (加鎖順序不一致;分析每個sql的加鎖順序)。

18 mysql內建功能 儲存過程

儲存過程包含了一系列可執行的sql語句,儲存過程存放於mysql中,通過呼叫它的名字可以執行其內部的一堆sql 使用儲存過程的優點 1.用於替代程式寫的sql語句,實現程式與sql解耦 2.基於網路傳輸,傳別名的資料量小,而直接傳sql資料量大使用儲存過程的缺點 1.程式設計師擴充套件功能不方便補充...

MySQL加鎖分析

參考 mysql 加鎖處理分析。該文已經講的很詳盡了,也易懂,下面僅僅是個人做的總結。逐條處理,逐條加鎖。gap鎖是間隙鎖,即相鄰兩條有效記錄間隙的鎖 鎖的是間隙 它是針對insert的,用來解決幻讀的發生。它會阻塞insert,但不會阻塞delete update等 記錄本來也不存在 rc與rr的...

MySQL必知必會 18MySQL更新資料

mysql必知必會 18mysql更新資料,基本的update語句由3部分組成,分別是 要更新的表 列名和它們的新值 確定要更新行的過濾條件。set子句設定cust email列為指定的值 在更新多個列時,只需要使用單個set命令,每個 列 值 對之間用逗號分隔 最後一列之後不用逗號 update語...