mysql鎖粒度就是我們通常所說的鎖級別。數據庫引擎具有多粒度鎖定,允許一個事務鎖定不同類型的資源。mysql數據庫有三種鎖的級別,分別是:頁級鎖、表級鎖和行級鎖。
鎖粒度
(推薦教程:mysql教程)
鎖粒度就是我們通常所說的鎖級別。
數據庫引擎具有多粒度鎖定,允許一個事務鎖定不同類型的資源。 為了盡量減少鎖定的開銷,數據庫引擎自動將資源鎖定在適合任務的級別。
鎖定在較小的粒度(例如行)可以提高并發度,但開銷較高,因為如果鎖定了許多行,則需要持有更多的鎖。 鎖定在較大的粒度(例如表)會降低了并發度,因為鎖定整個表限制了其他事務對表中任意部分的訪問。 但其開銷較低,因為需要維護的鎖較少。
鎖層次結構
數據庫引擎通常必須獲取多粒度級別上的鎖才能完整地保護資源。這組多粒度級別上的鎖稱為鎖層次結構。例如,為了完整地保護對索引的讀取,數據庫引擎實例可能必須獲取行上的共享鎖以及頁和表上的意向共享鎖。
MySQL有三種鎖的級別:頁級、表級、行級
MyISAM和MEMORY存儲引擎采用的是表級鎖(table-level locking);
BDB存儲引擎采用的是頁面鎖(page-level locking),但也支持表級鎖;
InnoDB存儲引擎既支持行級鎖(row-level locking),也支持表級鎖,但默認情況下是采用行級鎖。
MySQL這種鎖的特性可大致歸納如下:
表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖沖突的概率最高,并發度最低。
行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖沖突的概率最低,并發度也最高。
頁面鎖:開銷和加鎖時間界于表鎖和行鎖之間;會出現死鎖;鎖定粒度界于表鎖和行鎖之間,并發度一般。