背景

       當(dāng)用戶并發(fā)嘗試訪問(wèn)同一數(shù)據(jù)的時(shí),SQL Server嘗試用鎖來(lái)隔離不一致的數(shù)據(jù)和使用隔離級(jí)別查詢數(shù)據(jù)時(shí)控制一致性(數(shù)據(jù)該如何讀取),說(shuō)起鎖就會(huì)聯(lián)想到事務(wù),事務(wù)是一個(gè)工作單元,包括查詢/更新數(shù)據(jù)和數(shù)據(jù)定義。

鎖類型

在SQL Server中,根據(jù)資源的不同,鎖分為以下三種類型:
    行鎖:是SQL Server中數(shù)據(jù)級(jí)別中粒度最小的鎖級(jí)別,行鎖根據(jù)表是否存在聚集索引,分為鍵值鎖和標(biāo)識(shí)鎖
    頁(yè)鎖:針對(duì)某個(gè)數(shù)據(jù)頁(yè)添加的鎖,在T-SQL語(yǔ)句中,使用了頁(yè)鎖就不會(huì)在使用相同類型的行鎖,反之依然,在對(duì)數(shù)據(jù)頁(yè)加鎖后,無(wú)法在對(duì)其添加不兼容的鎖
    表鎖:添加表鎖則無(wú)法添加與其不兼容的頁(yè)?鎖和行鎖

鎖模式

   共享鎖(S):發(fā)生在數(shù)據(jù)查找之前,多個(gè)事務(wù)的共享鎖之間可以共存
   排他鎖(X):發(fā)生在數(shù)據(jù)更新之前,排他鎖是一個(gè)獨(dú)占鎖,與其他鎖都不兼容
   更新鎖(U):發(fā)生在更新語(yǔ)句中,更新鎖用來(lái)查找數(shù)據(jù),當(dāng)查找的數(shù)據(jù)不是要更新的數(shù)據(jù)時(shí)轉(zhuǎn)化為S鎖,當(dāng)是要更新的數(shù)據(jù)時(shí)轉(zhuǎn)化為X鎖
   意向鎖:發(fā)生在較低粒度級(jí)別的資源獲取之前,表示對(duì)該資源下低粒度的資源添加對(duì)應(yīng)的鎖,意向鎖有分為:意向共享鎖(IS) ,意向排他鎖(IX),意向更新鎖(IU),共享意向排他鎖(SIX),共享意向更新鎖(SIU),更新意向排他鎖(UIX)
   共享鎖/排他鎖/更新鎖一般作用在較低級(jí)別上,例如數(shù)據(jù)行或數(shù)據(jù)頁(yè),意向鎖一般作用在較高的級(jí)別上,例如數(shù)據(jù)表或數(shù)據(jù)。鎖是有層級(jí)結(jié)構(gòu)的,若在數(shù)據(jù)行上持有排他鎖的時(shí)候,則會(huì)在所在的數(shù)據(jù)頁(yè)上持有意向排他鎖. 在一個(gè)事務(wù)中,可能由于鎖持有的時(shí)間太長(zhǎng)或個(gè)數(shù)太多,出于節(jié)約資源的考慮,會(huì)造成鎖升級(jí)
   除了上述的鎖之外,還有幾個(gè)特殊類型的鎖,例如架構(gòu)鎖,架構(gòu)鎖包含兩種模式,架構(gòu)穩(wěn)定鎖(Sch-S)和架構(gòu)更新鎖(Sch-M) ,架構(gòu)穩(wěn)定鎖用來(lái)穩(wěn)定架構(gòu),當(dāng)查詢表數(shù)據(jù)的時(shí)候,會(huì)對(duì)表添加架構(gòu)穩(wěn)定鎖,防止架構(gòu)發(fā)生改變。當(dāng)執(zhí)行DDL語(yǔ)句的時(shí)候,會(huì)使用架構(gòu)更新鎖,確保沒(méi)有任何資源對(duì)表的占用。大數(shù)據(jù)量的表避免執(zhí)行DDL操作,這樣會(huì)造成架構(gòu)更新鎖長(zhǎng)時(shí)間占用資源,影響其他操作,除非必要不然不要執(zhí)行DDL語(yǔ)句,如在必要的情況下添加字段,需要先給字段初始化,在設(shè)置為非空。

鎖的兼容性

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)
如何查看一個(gè)事務(wù)中所請(qǐng)求的鎖類型和鎖的順序,可使用SQL Profiler 查看 Mode 屬性

數(shù)據(jù)準(zhǔn)備

        		

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式