程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql鎖機制總結

mysql鎖機制總結

編輯:MySQL綜合教程

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隔離級別。

  1. (讀不上鎖),只有走索引才可能上行鎖;否則會對聚簇索引的每一行上寫鎖,實際等同於對表上寫鎖。
  2. innodb會同時用行鎖對數據記錄(聚簇索引)加鎖。
  3. MVCC並發控制機制下,任何操作都不會阻塞讀操作,讀操作也不會阻塞任何操作,只因為讀不上鎖。

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

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved