1. 程式人生 > >MySQL加鎖分析(總結分析各種情況)

MySQL加鎖分析(總結分析各種情況)

參考:MySQL 加鎖處理分析。該文已經講的很詳盡了,也易懂,下面僅僅是個人做的總結。

一、 背景

1.1 隔離級別

1.2 加鎖過程

  逐條處理,逐條加鎖。

update 執行流程

1.3 兩階段鎖2PL

1.4 gap鎖

  gap鎖是間隙鎖,即相鄰兩條有效記錄間隙的鎖(鎖的是間隙),它是針對insert的,用來解決幻讀的發生。它會阻塞insert,但不會阻塞delete/update等(記錄本來也不存在)。

  RC與RR的重要區別就是幻讀。所以RR才需要引入gap鎖。

二、加鎖組合分析

  說加什麼鎖,首先要了解兩個前提:1)隔離級別;2)用到的索引。不同的隔離級別,不同的索引都會影響加鎖。

2.1 可提交讀RC

主鍵/唯一鍵二級索引無索引
select
insert行鎖行鎖行鎖
select...for update/update/delete行鎖有效行的行鎖全表鎖聚簇索引

2.2 可重複讀RR

主鍵/唯一鍵二級索引無索引
select
insert行鎖行鎖行鎖
select...for update/update/delete行鎖有效行的行鎖+gap鎖全表鎖聚簇索引

2.3 可序列化S

主鍵/唯一鍵二級索引無索引
select(快照讀)SSS
其他(當前讀)XXX

  注意:無索引時,select...for update/update/delete是需要鎖全表的,但mysql_server可以做優化,在逐條加鎖時,如果發現不是目標記錄,可以釋放掉鎖。但這會違背2PL的原則。

2.4 結論

  死鎖的發生與否,並不在於事務中有多少條SQL語句,死鎖的關鍵在於:兩個(或以上)的Session加鎖的順序不一致。

  加鎖過程是逐條處理,逐條加鎖(最終都反映在聚簇索引上)的。

  • 主鍵,加在聚簇索引上;
  • 二級索引,加在二級索引+聚簇索引上;
  • 無索引,加在聚簇索引上。

所以如果兩個session用到不同的二級索引,那麼對聚簇索引的加鎖順序是不一致的,從而導致session間鎖的持有與競爭,很容易產生死鎖。

相關推薦

MySQL分析總結分析各種情況

參考:MySQL 加鎖處理分析。該文已經講的很詳盡了,也易懂,下面僅僅是個人做的總結。一、 背景1.1 隔離級別1.2 加鎖過程  逐條處理,逐條加鎖。1.3 兩階段鎖2PL1.4 gap鎖  gap鎖是間隙鎖,即相鄰兩條有效記錄間隙的鎖(鎖的是間隙),它是針對insert的,用來解決幻讀的發生。它會阻塞in

MySQL 處理分析

轉自:何登成部落格:http://hedengcheng.com/?p=771 背景 MySQL/InnoDB的加鎖分析,一直是一個比較困難的話題。我在工作過程中,經常會有同事諮詢這方面的問題。同時,微博上也經常會收到MySQL鎖相關的私信,讓我幫助解決一些

MySQL 處理分析

insert 了解 med 做了 mit 不變 最簡 唯一性 b+ 背景 MySQL/InnoDB的加鎖分析,一直是一個比較困難的話題。我在工作過程中,經常會有同事咨詢這方面的問題。同時,微博上也經常會收到MySQL鎖相關的私信,讓我幫助解決一些死鎖的問題。

(轉)MySQL 處理分析

新的 不存在 ood for set ble b+ 行鎖 version MySQL 加鎖處理分析 原文:http://hedengcheng.com/?p=771 1 背景 1 1.1 MVCC:Snapshot Read vs Current R

mysql 分析與實踐

一序      本文分為兩個部分,第一部分主要基於何登成大神的文章。何博士作為阿里資料庫核心團隊大神。文章更是深入淺出。膜拜一下:原文地址如下  http://hedengcheng.com/?p=771    第二部分介紹常見的實踐注意事項。 二 背景   MVCC

mysql分析

分析場景 1.1 工具:mysql5.5.53,在windows開啟兩個mysql命令列,m1、m2、m3,m1執行更新、刪除操作,m2查詢,m3查詢事務 1.2 表結構:兩個欄位,一個id,一個price 1.3 刪除SQL:delete from t1 w

MySQL處理分析

1背景    1 5總結    16 背景 MySQL/InnoDB的加鎖分析,一直是一個比較困難的話題。我在工作過程中,經常會有同事諮詢這方面的問題。同時,微博上也經常會收到MySQL鎖相關的私信,讓我幫助解決一些死鎖的問題。本文

【轉】MySQL 處理分析

背景 MySQL/InnoDB的加鎖分析,一直是一個比較困難的話題。我在工作過程中,經常會有同事諮詢這方面的問題。同時,微博上也經常會收到MySQL鎖相關的私信,讓我幫助解決一些死鎖的問題。本文,準備就MySQL/InnoDB的加鎖問題,展開較為深入的分析與討

Mysql過程詳解4-select for update/lock in share mode 對事務並發性影響

per inno targe 允許 evel transacti 修改 not null warn select for update/lock in share mode 對事務並發性影響 事務並發性理解 事務並發性,粗略的理解就是單位時間內能夠執行的事務數量,常見的單

Mysql過程詳解9-innodb下的記錄,間隙,next-key

ans 唯一索引 crazy cimage -h insert tran 存在 gin Mysql加鎖過程詳解(1)-基本知識 Mysql加鎖過程詳解(2)-關於mysql 幻讀理解 Mysql加鎖過程詳解(3)-關於mysql 幻讀理解 Mysql加鎖過程詳解(4)-

Bug預防體系上千bug分析總結的最佳實踐

常常 chrome initial 請求 off 目的 進行 同步 產品需求 Bug預防體系(上千bug分析後總結的最佳實踐) 原創 2017-08-16俞美玲 光榮之路 吳老的《selenium webdriver 實戰寶典》出版了! web常見產品問題及預

列舉建立單例模式和懶漢式單例模式分析與比較

列舉建立單例的模式的優勢比較:方式優點缺點餓漢式執行緒安全, 呼叫效率高不能延遲載入懶漢式執行緒安全, 可以延遲載入呼叫效率不高雙重檢測鎖執行緒安全, 呼叫效率高, 可以延遲載入-靜態內部類執行緒安全, 呼叫效率高, 可以延遲載入-列舉執行緒安全, 呼叫效率高不能延遲載入列舉

演算法分析總結排序演算法效能及比較總結

一、按平均時間將排序分為四類: (1)平方階(O(n2))排序      一般稱為簡單排序,例如直接插入、直接選擇和氣泡排序; (2)線性對數階(O(nlgn))排序      如快速、堆和歸併排序; (3)O(n1+£)階排序      £是介於0和1之間的常數,即0

linux核心中socket的建立過程原始碼分析總結性質

http://www.jianshu.com/p/5d82a685b5b6 在漫長地分析完socket的建立原始碼後,發現一片漿糊,所以特此總結,我的部落格中同時有另外一篇詳細的原始碼分析,核心版本為3.9,建議在閱讀本文後若還有興趣再去看另外一篇博文。絕對不要單獨看另外

MySql資料型別分析數值(小數型)型別 Part2

一.小數型 包括兩種型別: 1.浮點型 Float(M,D) 2.定點型 decimal(M,D) 二.M,D分析 1.小數型中的M和整數中的M 大不相同; 2.整數中的M 與所存資料的大小沒有關係,只在有ZEROFILL修飾符時,控制顯示填充零的為數有關。 3.小數中

綜合案例分析sort,cut,正則

sbin ati bsp ima 如何 難點 一次 方法 當前 1、 找出ifconfig “網卡名” 命令結果中本機IPv4地址 分析: 解釋:要取出ip地址,首先我們可以先取出ip所在的行,即取行;可以結合head和tail,後面會有 更好的方法去取行,取列當然

Mysql過程詳解

插入記錄 控制 uniq null 詳細 server 讀者 index 理論知識 1、背景   MySQL/InnoDB的加鎖分析,一直是一個比較困難的話題。我在工作過程中,經常會有同事咨詢這方面的問題。同時,微博上也經常會收到MySQL鎖相關的私信,讓我幫助解決一些死

木馬分析控制分析實驗

src 可能 理解 操作 strong 火墻 -128 顯示 es2017 一、實驗目的 理解和掌握木馬傳播和運行的基本原理 在虛擬機上模擬木馬傳播和感染 認識常見的木馬控制功能 加深對木馬的安全防範意識 二、實驗內容 介紹與木馬相關的基本概念 配置木馬文件 測試木馬

線性判別分析Linear Discriminant Analysis-LDA

png 數學 坐標軸 ima 特征 分析 技術 數據預處理 距離 Linear Discriminant Analysis(LDA線性判別分析)   用途:數據預處理中的降維,分類任務   目標:LDA關心的是能夠最大化類間區分度的坐標軸成分,將特征空間(數據集中的多維樣本

數據結構-堆 接口定義與實現分析詳細註釋與圖解

info 獲取 init ret targe 動態 函數 target 用戶自定義函數 如果想了解堆的概念,可以點擊此處查看前面關於堆的定義的隨筆。 堆的操作接口包括初始化堆、銷毀堆、向堆中插入元素、從堆頂移除元素、堆的結點個數。 我們用heap來命名一個堆。下面是對以上接