1.隔離級別
(1)讀不提交(Read Uncommited,RU)
(2)讀提交(Read commited,RC)
RC隔離級別下,每條語句都會讀取已提交事務的更新,若兩次查詢之間有其他事務提交,則會導致兩次查詢結果不一致。雖然如此,讀提交隔離級別在生產環境中使用很廣泛。
(3)可重復讀(Repeatable Read, RR)
mysql是如何實現可重復讀隔離級別的。
(4)串行化(Serializable)
dba會在並發和滿足業務需求之間作權衡,選擇合適的隔離級別。
2.並發調度方式
(MVCC)相對於傳統的基於鎖的並發控制主要特點是讀不上鎖,這種特性對於讀多寫少的場景,大大提高了系統的並發度,因此大部分關系型數據庫都實現了MVCC。
3.兩階段鎖協議
4.死鎖
5.鎖類型
mysql而言,事務機制更多是靠底層的存儲引擎來實現,因此,mysql層面只有表鎖,而支持事務的innodb存儲引擎則實現了行鎖(記錄鎖),gap鎖,next-key鎖。Mysql的記錄鎖實質是索引記錄的鎖,因為innodb是索引組織表;gap鎖是索引記錄間隙的鎖,這種鎖只在RR隔離級別下有效;next-key鎖是記錄鎖加上記錄之前gap鎖的組合。mysql通過gap鎖和next-key鎖實現RR隔離級別。
6. 鎖互斥與兼容關系矩陣
X (排他鎖)
S (共享鎖)
IX (意向排他鎖)
IS(意向共享鎖)
(y表示兼容,n表示不兼容):
7.mysql鎖相關操作
(1).查看最近一次死鎖信息
LATEST DETECTED DEADLOCK這一欄的相關信息。
(2)查看正在使用的鎖
SELECT r.trx_id waiting_trx_id,
r.trx_query waiting_query,
b.trx_id blocking_trx_id,
b.trx_query blocking_query,
b.trx_mysql_thread_id blocking_thread,
b.trx_started,
b.trx_wait_started
FROM information_schema.innodb_lock_waits w
INNER JOIN information_schema.innodb_trx b
ON b.trx_id = w.blocking_trx_id
INNER JOIN information_schema.innodb_trx r
ON r.trx_id = w.requesting_trx_id
(3)查看事務的隔離級別
8.典型SQL語句鎖分析
:登博有一篇文章《MySQL加鎖處理分析》對mysql加鎖寫地非常詳細,大家可以好好學習下,鏈接地址:http://hedengcheng.com/?p=771