SQLSERVER 鎖粒度和層次結構

2021-06-28 03:28:05 字數 917 閱讀 2865

sql server 2008 r2

其他版本

0(共 1)對本文的評價是有幫助 - 

評價此主題

microsoft sql server 資料庫引擎具有多粒度鎖定,允許乙個事務鎖定不同型別的資源。 為了儘量減少鎖定的開銷,資料庫引擎自動將資源鎖定在適合任務的級別。 鎖定在較小的粒度(例如行)可以提高併發度,但開銷較高,因為如果鎖定了許多行,則需要持有更多的鎖。 鎖定在較大的粒度(例如表)會降低了併發度,因為鎖定整個表限制了其他事務對錶中任意部分的訪問。 但其開銷較低,因為需要維護的鎖較少。

資料庫引擎通常必須獲取多粒度級別上的鎖才能完整地保護資源。 這組多粒度級別上的鎖稱為鎖層次結構。 例如,為了完整地保護對索引的讀取,資料庫引擎例項可能必須獲取行上的共享鎖以及頁和表上的意向共享鎖。

下表列出了資料庫引擎可以鎖定的資源。

資源說明

rid用於鎖定堆中的單個行的行識別符號。

key索引中用於保護可序列化事務中的鍵範圍的行鎖。

page

資料庫中的 8 kb 頁,例如資料頁或索引頁。

extent

一組連續的八頁,例如資料頁或索引頁。

hobt

堆或 b 樹。 用於保護沒有聚集索引的表中的 b 樹(索引)或堆資料頁的鎖。

table

包括所有資料和索引的整個表。

file

資料庫檔案。

應用程式專用的資源。

metadata

元資料鎖。

allocation_unit

分配單元。

database

整個資料庫。

注意

使用 alter table 的 lock_escalation 選項會對 hobt 和 table 鎖帶來影響。

鎖粒度示例

準備資料 建立表並插入資料 create table if not exists lock test id int unsigned auto increment,name varchar 100 not null default comment 名字 age int not null defaul...

控制鎖的粒度

日期 2009年5月3日 翻譯 張洪舉 原文 在sql server 7.0 的所有版本中,引擎可以鎖定行 頁或整個表。此外,即使通過獲取行或頁鎖的方式啟動了查詢,如果獲取了太多的鎖,sql server 也可能會將其提公升到乙個表鎖。每個鎖都需要使用記憶體,所以,當以乙個表鎖公升級替換成千上萬的細...

MySQL鎖的型別和粒度 MySql 鎖分類

mysql加鎖機制 根據型別可分為共享鎖 shared lock 和排他鎖 exclusive lock 或者叫讀鎖 read lock 和寫鎖 write lock 根據粒度劃分又分表鎖和行鎖。表鎖由資料庫伺服器實現,行鎖由儲存引擎實現。相對其他資料庫而言,mysql的鎖機制比較簡單,基最顯著的特...