mysql鎖定粒度就是我們通常所說的鎖定層級。資料庫引擎具有多粒度鎖定,允許一個事務鎖定不同類型的資源。 mysql資料庫有三種鎖的級別,分別是:頁級鎖、表級鎖和行級鎖。
鎖定粒度
#(推薦教學:mysql教學)
鎖粒度就是我們通常所說的鎖等級。
資料庫引擎具有多粒度鎖定,允許一個交易鎖定不同類型的資源。為了盡量減少鎖定的開銷,資料庫引擎會自動將資源鎖定在適合任務的層級。
鎖定在較小的粒度(例如行)可以提高並發度,但開銷較高,因為如果鎖定了許多行,則需要持有更多的鎖。鎖定在較大的粒度(例如表)會降低了並發度,因為鎖定整個表限制了其他事務對錶中任意部分的存取。但其開銷較低,因為需要維護的鎖較少。
鎖定層次結構
資料庫引擎通常必須取得多粒度層級上的鎖定才能完整地保護資源。這組多粒度層級上的鎖稱為鎖定層次結構。例如,為了完整地保護對索引的讀取,資料庫引擎執行個體可能必須取得行上的共用鎖定以及頁和表上的意圖共用鎖定。
MySQL有三種鎖定的層級:頁級、表單層級、行級
MyISAM和MEMORY儲存引擎採用的是表格級鎖定(table-level locking) ;
BDB儲存引擎採用的是頁面鎖定(page-level locking),但也支援表格層級鎖定;
InnoDB儲存引擎既支援行級鎖定(row-level locking),也支援表級鎖,但預設為採用行級鎖。
MySQL這種鎖定的特性可大致歸納如下:
#表格層級鎖定:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的機率最高,並發度最低。
行級鎖定:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖定衝突的機率最低,並發度也最高。
頁面鎖定:開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,並發度一般。
以上是mysql鎖粒度是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!