亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

為什么我們需要在SQL Server里更新鎖

 更新時(shí)間:2015年07月27日 12:05:04   作者:Visitors  
這篇文章告訴我們?yōu)槭裁次覀冃枰赟QL Server里更新鎖,需要的朋友可以參考下

每次講解SQL Server里的鎖和阻塞(Locking & Blocking)都會(huì)碰到的問(wèn)題:在SQL Server里,為什么我們需要更新鎖?在我們講解具體需要的原因前,首先我想給你介紹下當(dāng)更新鎖(Update(U)Lock)獲得時(shí),根據(jù)它的兼容性鎖本身是如何應(yīng)對(duì)的。

一般來(lái)說(shuō),當(dāng)執(zhí)行UPDATE語(yǔ)句時(shí),SQL Server會(huì)用到更新鎖(Update Lock)。如果你查看對(duì)應(yīng)的執(zhí)行計(jì)劃,你會(huì)看到它包含3個(gè)部分:

讀取數(shù)據(jù)
計(jì)算新值
寫(xiě)入數(shù)據(jù)

在查詢計(jì)劃的第1部分,SQL Server初始讀取要修改的數(shù)據(jù),在各個(gè)記錄上會(huì)獲得更新鎖(Update Locks)。在查詢計(jì)劃的最后第3部分,當(dāng)數(shù)據(jù)被修改時(shí),這些更新鎖(Update Locks)轉(zhuǎn)化為排它鎖(Exclusive(X))。用這個(gè)方法產(chǎn)生的問(wèn)題都是一樣的:在第1個(gè)階段,SQL Server為什么要獲得更新鎖(Update Locks),而不是共享鎖(Shared(S) Locks)。平常當(dāng)你通過(guò)SELECT語(yǔ)句讀取數(shù)據(jù),共享鎖(Shared(S) Locks)已經(jīng)夠用了?,F(xiàn)在的更新查詢計(jì)劃為什么有這個(gè)區(qū)別?我們來(lái)詳細(xì)分析下。

回避死鎖(Deadlock Avoidance)
首先在更新查詢計(jì)劃里,更新鎖用來(lái)避免死鎖情形。假設(shè)在計(jì)劃的第1階段,有多個(gè)更新查詢計(jì)劃獲得共享鎖(Shared(S)Locks),然后在查詢計(jì)劃的第3階段,當(dāng)數(shù)據(jù)最后被修改時(shí),這些共享鎖(Shared Locks)轉(zhuǎn)化為排它鎖(Exclusive Loks),會(huì)發(fā)生什么:

第1個(gè)查詢不能轉(zhuǎn)化共享鎖為排它鎖,因?yàn)榈?個(gè)查詢已經(jīng)獲得了共享鎖。
第2個(gè)查詢不能轉(zhuǎn)化共享鎖為排它鎖,因?yàn)榈?個(gè)查詢已經(jīng)獲得了共享鎖。

這是其中一個(gè)主要原因,為什么關(guān)系數(shù)據(jù)庫(kù)引擎引入更新鎖來(lái)實(shí)現(xiàn)避免特定的死鎖情形。一個(gè)更新鎖只與一個(gè)共享鎖兼容,但不與另一個(gè)更新或排它鎖兼容。因此死鎖情形可以被避免,應(yīng)為2個(gè)更新查詢計(jì)劃不可能同時(shí)并發(fā)運(yùn)行。在查詢的第1階段,第2個(gè)查詢會(huì)一直等到獲得更新鎖。System R的一個(gè)未公開(kāi)研究也展示如何避免這類顯著的死鎖。System R不實(shí)用任何更新鎖來(lái)實(shí)現(xiàn)避免死鎖。

提升的并發(fā)

在第1階段不獲得更新鎖,在這個(gè)階段直接獲得排它鎖也是可見(jiàn)選項(xiàng)。這會(huì)克服死鎖問(wèn)題,因?yàn)榕潘i與另一個(gè)排它鎖不兼容。但這個(gè)方法的問(wèn)題是并發(fā)受限制,因?yàn)橥瑫r(shí)沒(méi)有其他的SELECT查詢可以讀取當(dāng)前有排它鎖的數(shù)據(jù)。因此需要更新鎖,因?yàn)檫@個(gè)特定鎖與傳統(tǒng)的共享鎖兼容。這樣的話其他的SELECT查詢可以讀取數(shù)據(jù),只要這個(gè)更新鎖還沒(méi)轉(zhuǎn)化為排它鎖。作為副作用,這會(huì)提高我們并發(fā)運(yùn)行查詢的并發(fā)性。

在以前關(guān)系學(xué)術(shù)上,更新鎖是所謂的非對(duì)稱鎖(Asymmetric Lock)。在更新鎖的上下文里,這個(gè)更新鎖與共享鎖兼容,但反之就不是:共享鎖與更新鎖不兼容。但SQL Server并不把共享鎖作為非對(duì)稱鎖實(shí)現(xiàn)。更新鎖是個(gè)對(duì)稱(symmetric)的,就是說(shuō)更新鎖和共享鎖是彼此雙向兼容的。這會(huì)提供系統(tǒng)的整體并發(fā),因?yàn)樵?個(gè)鎖類型鍵不會(huì)引入阻塞情形。

小結(jié)
在今天的文章里我給你介紹了共享鎖,還有為什么需要共享鎖。如你所見(jiàn)在關(guān)系數(shù)據(jù)庫(kù),是強(qiáng)烈需要更新鎖的,因?yàn)椴蝗坏木蜁?huì)帶來(lái)死鎖并降低并發(fā)。我希望現(xiàn)在你已經(jīng)很好的理解了更新鎖,還有在SQL Server里它們是如何使用的。

以上就是本文的全部?jī)?nèi)容了,希望大家可以喜歡。

相關(guān)文章

  • SqlServer事務(wù)語(yǔ)法及使用方法詳解

    SqlServer事務(wù)語(yǔ)法及使用方法詳解

    事務(wù)是關(guān)于原子性的,原子性的概念是指可以把一些事情當(dāng)做一個(gè)不可分割的單元來(lái)看待,這篇文章主要介紹了SqlServer事務(wù)語(yǔ)法及使用方法,需要的朋友可以參考下
    2022-12-12
  • SQL SERVER函數(shù)之深入表值函數(shù)的處理分析

    SQL SERVER函數(shù)之深入表值函數(shù)的處理分析

    本篇文章是對(duì)表值函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 利用sys.sysprocesses檢查SqlServer的阻塞和死鎖

    利用sys.sysprocesses檢查SqlServer的阻塞和死鎖

    Sys.SysProcesses 系統(tǒng)表是一個(gè)很重要的系統(tǒng)視圖,主要用來(lái)定位與解決Sql Server的阻塞和死鎖
    2011-10-10
  • DDL、DML和DCL的區(qū)別與理解

    DDL、DML和DCL的區(qū)別與理解

    這篇文章主要介紹了DDL、DML和DCL的區(qū)別與理解,需要的朋友可以參考下
    2013-08-08
  • SqlServer 擴(kuò)展屬性的介紹

    SqlServer 擴(kuò)展屬性的介紹

    SqlServer 擴(kuò)展屬性的介紹,需要的朋友可以參考一下
    2013-03-03
  • SQLSERVER記錄登錄用戶的登錄時(shí)間(自寫(xiě)腳本)

    SQLSERVER記錄登錄用戶的登錄時(shí)間(自寫(xiě)腳本)

    下面是本人寫(xiě)的一個(gè)腳本,我的實(shí)現(xiàn)原理是使用觸發(fā)器,觸發(fā)器是登錄觸發(fā)器,范圍是整個(gè)服務(wù)器范圍,如果有人登錄過(guò),就使用 bcp命令把登錄信息記錄日志文件,感興趣的朋友可以了解下,或許本文的知識(shí)點(diǎn)對(duì)你有所幫助
    2013-02-02
  • 淺談SQL Server中統(tǒng)計(jì)對(duì)于查詢的影響分析

    淺談SQL Server中統(tǒng)計(jì)對(duì)于查詢的影響分析

    SQL Server查詢分析器是基于開(kāi)銷的。通常來(lái)講,查詢分析器會(huì)根據(jù)謂詞來(lái)確定該如何選擇高效的查詢路線,比如該選擇哪個(gè)索引
    2012-05-05
  • SQLSERVER服務(wù)手工啟動(dòng) 批處理文件

    SQLSERVER服務(wù)手工啟動(dòng) 批處理文件

    裝完SQLSERVER2005 因?yàn)殚_(kāi)機(jī)很慢 所以呢就把開(kāi)機(jī)服務(wù)搞成手動(dòng)的了,這樣開(kāi)機(jī)快了很多可是問(wèn)題也來(lái)了每次要用SqlServer的時(shí)候要一個(gè)一個(gè)服務(wù)去開(kāi)起來(lái)
    2011-03-03
  • SQLServer中的切割字符串SplitString函數(shù)

    SQLServer中的切割字符串SplitString函數(shù)

    有時(shí)我們要用到批量操作時(shí)都會(huì)對(duì)字符串進(jìn)行拆分,可是SQL Server中卻沒(méi)有自帶Split函數(shù),所以要自己來(lái)實(shí)現(xiàn)了。沒(méi)什么好說(shuō)的,需要的朋友直接拿去用吧
    2011-11-11
  • SQL?Server新特性SequenceNumber用法介紹

    SQL?Server新特性SequenceNumber用法介紹

    這篇文章介紹了SQL?Server新特性SequenceNumber的用法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02

最新評(píng)論