JavaShuo
欄目
標籤
mysql-innodb-鎖
時間 2020-02-27
標籤
mysql
innodb
欄目
MySQL
简体版
原文
原文鏈接
鎖的算法
Record Lock:單個行記錄上的鎖
經過主鍵索引,鎖定單行
read committed
隔離級別下采用。
Geo Lock:間隙鎖,鎖定一個範圍但不包含自己
能夠防止多個多個事務將記錄插入到同一個範圍內(Phantom Problem)
對於惟一鍵值對的鎖定,GeoLock會降級爲Record Lock。
Next-Key Lock:Geo Lock+Record Lock,鎖定一個範圍並鎖定記錄自己
在同一事務下,連續執行兩次sql語句可能致使不一樣的結果。第二次的sql可能會返回以前不存在的行
例如,假設表裏有id爲1,2,5三條記錄,對於
select * from table where id >2 for update
語句,
Next-Key Lock
鎖定的不止是
5
這一行,而是[2,+∞]。
repeatable read
隔離級別採用
數據問題
Dirty Read(髒讀問題)
一個事務中讀到了另外一個事務中未提交的數據,違反了數據庫
隔離性
,隔離級別
read uncommitted
。
Phantom Problem(幻讀問題)
在同一事務下,連續執行兩次sql語句可能致使不一樣的結果。第二次的sql可能會返回以前不存在的行。
repeatable read隔離級別下,Innodb採用Next-Key Lock對查詢區域進行枷鎖解決幻讀問題。
不可重複讀
一個事務中讀到了另外一個事務中未提交的數據,違反了數據庫
一致性
。
通常狀況下,讀到的都是已提交的數據,不少廠商默認隔離級別就是read committed。
MYSQL官方文檔將不可重複讀定義爲
Phantom Problem(幻讀)
,經過Next-Key Lock來解決幻讀問題。
Next-Key Lock不只鎖住了掃描到的索引,同時鎖住了索引的覆蓋範圍。
丟失更新
T1事務提交的更新操做被T2事務的更新覆蓋掉。
物理丟失更新不會出現,由於T2事務的操做會被T1阻塞。
邏輯丟失可能會出現:全部操做添加X排他鎖,數據庫
串行化
。
阻塞
T2事務須要等待T1事務釋放資源後再進行資源佔有。
死鎖
兩個或以上的事務因爭奪資源形成的互相等待現象。
解決方案:
算法
超時回滾:當超時的事務所佔權重較大或事務更新了較多行,undolog較大時回滾所用時間較長。
wait-for graph(等待圖) 死鎖檢測方式:
sql
等待圖存儲了鎖的信息鏈表和事務等待鏈表,經過深度優先搜索進行遞歸排查。
查到後選擇undolog較小的事務進行回滾。
鎖升級
若是數據庫設計者認爲鎖是一種稀缺資源,則會出現1000個行鎖升級爲頁鎖,頁鎖升級爲表鎖現象。
Innodb沒有鎖升級。由於每一個事務都是對頁進行管理,且採用的是位圖存儲的方式。鎖開銷較小。
相關文章
1.
MySQLInnoDB存儲引擎之鎖
2.
MySQLInnoDB表空間管理20201102
3.
每日記錄之MysqlInnoDB緩存
4.
MySQLInnoDB存儲引擎基本管理20201018
5.
MySQLInnoDB引擎事物隔離級別RC和RR
6.
MySQL - 行鎖 表鎖 樂觀鎖 悲觀鎖 讀鎖 寫鎖
7.
MySQL:行鎖、表鎖、樂觀鎖、悲觀鎖、讀鎖、寫鎖
8.
悲觀鎖,樂觀鎖,行鎖,表鎖,頁鎖,共享鎖,排他鎖
9.
各種鎖(互斥鎖,自旋鎖,讀寫鎖,樂觀鎖,悲觀鎖,死鎖)
10.
死鎖、活鎖、飢餓鎖、無鎖
更多相關文章...
•
Hibernate悲觀鎖
-
Hibernate教程
•
Hibernate樂觀鎖
-
Hibernate教程
•
漫談MySQL的鎖機制
•
TiDB 在摩拜單車在線數據業務的應用和實踐
相關標籤/搜索
mysqlinnodb
加鎖
車鎖
鎖頭
封鎖
門鎖
開鎖
連鎖
互鎖
MySQL
Redis教程
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
windows下配置opencv
2.
HED神經網
3.
win 10+ annaconda+opencv
4.
ORB-SLAM3系列-多地圖管理
5.
opencv報錯——(mtype == CV_8U || mtype == CV_8S)
6.
OpenCV計算機視覺學習(9)——圖像直方圖 & 直方圖均衡化
7.
【超詳細】深度學習原理與算法第1篇---前饋神經網絡,感知機,BP神經網絡
8.
Python數據預處理
9.
ArcGIS網絡概述
10.
數據清洗(三)------檢查數據邏輯錯誤
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
1.
MySQLInnoDB存儲引擎之鎖
2.
MySQLInnoDB表空間管理20201102
3.
每日記錄之MysqlInnoDB緩存
4.
MySQLInnoDB存儲引擎基本管理20201018
5.
MySQLInnoDB引擎事物隔離級別RC和RR
6.
MySQL - 行鎖 表鎖 樂觀鎖 悲觀鎖 讀鎖 寫鎖
7.
MySQL:行鎖、表鎖、樂觀鎖、悲觀鎖、讀鎖、寫鎖
8.
悲觀鎖,樂觀鎖,行鎖,表鎖,頁鎖,共享鎖,排他鎖
9.
各種鎖(互斥鎖,自旋鎖,讀寫鎖,樂觀鎖,悲觀鎖,死鎖)
10.
死鎖、活鎖、飢餓鎖、無鎖
>>更多相關文章<<