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

MySQL鎖機制總結(二),mysql鎖機制總結

編輯:MySQL綜合教程

MySQL鎖機制總結(二),mysql鎖機制總結


前言:

Mysql是一個支持插件式存儲引擎的數據庫系統,本文討論的鎖機制也主要包含兩部分SERVER層的鎖和存儲引擎的鎖,存儲引擎是指innodb,其它存儲引暫不討論。              

1. 數據庫中鎖相關的基本概念

1)  樂觀鎖,悲觀鎖

      樂觀鎖和悲觀鎖都是一種並發控制策略。悲觀鎖假定多個事務會同時訪問同一個資源,采用的策略是“先上鎖,後訪問”,這種策略會有死鎖的風險。樂觀鎖相對於悲觀鎖而言,假定多個事務在運行過程中不會相互影響,寫入在讀取和寫入記錄時,不上鎖,取而代之是產生一個時間戳或版本號,事務提交階段,檢查記錄的版本號是否有被修改(若修改,則表示有其他事務讀寫),確定是否需要回滾事務。目前在數據庫領域,幾乎所有的DBMS都是采用悲觀鎖機制。

2)  MVCC(Multi-Version Concurrency Control)

      MVCC也是一種並發控制方法,MVCC對悲觀鎖控制機制做了改進,通過冗余數據的歷史版本,達到“讀不上鎖,讀寫不沖突”的效果,提高了並發效果。MVCC主要作用於讀提交和可重復讀兩種隔離級別上。

3)  兩階段鎖協議

      所謂兩段鎖協議是指上鎖分為兩個階段,加鎖和解鎖階段,保證加鎖和解鎖階段不交錯。對於數據庫系統而言,事務開始時,處於加鎖階段;事務提交或rollback時,事務進入解鎖階段。只有滿足兩段鎖協議的數據庫系統,並發調度的事務才是可以串行化的。

4)  意向鎖

     意向鎖機制約定如果對一個節點加鎖,必需先對它的上一層節點加意向鎖。比如,對一個記錄加鎖之前,首先對該記錄所在的表加意向鎖。意向鎖主要包括IS和IX,他們與S和X的兼容關系不在這裡贅述。意向鎖的主要作用在於提高表鎖和行鎖沖突檢測效率。

5) 表鎖,記錄(行)鎖

      表鎖和記錄鎖是鎖系統裡面最基本的鎖。分別用於鎖定表和記錄。對於表而言,根據情況可以有S,X,IS和IX四種鎖類別;對表上IS和IX,表示需要讀記錄和寫記錄;記錄鎖則主要包括X鎖和S鎖。有關行鎖的實現,可以參考之前的文章,INNODB行鎖源碼學習

6) 字典鎖(metadata lock)

    字典鎖是保護元數據的一種鎖,主要為了防止DDL和DML沖突的情況。有關MDL的詳細介紹,可以參考之前的文章,MYSQL METADATA LOCK

7)  死鎖

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