SQL SERVER的鎖機制(四)——概述(各種事務隔離級別發生的影響)

SQL SERVER的鎖機制(一)——概述(鎖的種類與范圍)

SQL SERVER的鎖機制(二)——概述(鎖的兼容性與可以鎖定的資源)

?

本文上接SQL SERVER的鎖機制(三)——概述(鎖與事務隔離級別)

?

?

六、各種事務隔離級別發生的影響

修改數據的用戶會影響同時讀取或修改相同數據的其他用戶。即這些用戶可以并發訪問數據。如果數據存儲系統沒有并發控制,則用戶可能會看到以下負面影響:

·?未提交的依賴關系(臟讀)

·?不一致的分析(不可重復讀)

·?幻讀

(一)臟讀:

例:張某正在執行某項業務,如下:

begin traninsert tbUnRead select 3,'張三'unionselect 4,'李四'---延遲秒,模擬真實交易情形,用于處理業務邏輯waitfor delay '00:00:05'rollback tran---此時李某對表中數據進行查詢,執行了以下語句:set Transaction isolation level read uncommitted--查詢數據select * from tbUnRead where name like '張%'

?

?

則李某可以看到張某所執行的插入語句,把數據添加到了數據庫,如下圖。

但是張某最終是沒有提交事務,而是回滾了事務,所以這條記錄并沒有真正插入到數據庫中。從而發生李某將臟讀的數據當成真實的查詢結果。

???要解決此問題,就是要把數據庫的事務隔離級別由未提交讀修改成已提交讀。只有當查詢結果的正確性不是非常重要,或者是隔一段時間查詢一次情況下,即使這一次查詢結果是錯,而下次查詢結果是對的,并不會有太大影響,這才適合使用未提交讀。

?

(二)不可重復讀

例:張某正在查詢數據,如下

set Transaction isolation level read committedbegin transelect * from tbUnRead  where ID=2---延遲秒,模擬真實交易情形,用于處理業務邏輯waitfor delay '00:00:05'select * from tbUnRead  where ID=2commit tran---此時李對表中數據進行了更新,如下語句:update tbUnReadset name='Jack_upd'where ID=2

?

?上面的執行語句造成張某在同一個事務內,兩次相同的查詢條件,查詢到不相同的結果(如下圖)。

這是由于“已提交讀”隔離級別對共享鎖保留的時間是:一旦查詢完畢就立即釋放,而非事務完成才釋放。所在張某雖然還在使用事務,事務過程中的所有獨占鎖都會一直保留,讓事務中所更改的數據別人不可進行查詢與更改,直到事務完成。但是,被查詢的數據在事務過程中是查詢完畢就立即釋放共享鎖,所以別人仍然可以進行修改,造成一筆事務中,兩次相同的查詢條件,可以得到不相同的結果。最佳的解決方案是將隔離級別設置為“可重復讀”。

“可重復讀”事務隔離級別,讓事務過程中所曾經建立的共享鎖都一直保留到事務完成,雖然可以避免“不可重復讀”的問題,但是也會導致數據鎖定太久,而別人無法讀取數據,影響并發率,甚至提高了“死鎖”的發生率。

?

(三)幻讀

例:張某正在查詢數據,如下

set Transaction isolation level REPEATABLE READbegin transelect * from tbUnRead  where ID=3---延遲秒,模擬真實交易情形,用于處理業務邏輯waitfor delay '00:00:05'select * from tbUnRead  where ID=3commit tran--此時李某新增了一條記錄,如下語句:INSERT TBUNreadselect 3,'幻讀'

?

?

?

張某已經把隔離級別設置為“可重復讀”,雖然是曾經讀取的數據,不管是共享鎖還是互斥鎖都?保留到了事務結束,但是無法阻止其他人運行新增操作,導致第一次查詢時沒有數據,第二次查詢時卻有了數據。被稱為“幻讀”。如下圖。

為了避免此類問題,可以將隔離級別設置為“可序列化”,設置之后,則其他人則無法新增數據。

?

?

七、各隔離級別所能防止的訪問錯誤

隔離級別

臟讀

不可重復讀

幻讀

未提交讀

已提交讀

可重復讀

快照

可序列化

?

?

八、常用鎖與事務隔離級別間的交互影響

?

已提交讀

可重復讀

快照

可序列化

共享

讀完數據后就釋放

事務結束才釋放

不加鎖,以版本來控制

事務結束才釋放

更新

讀完數據后就釋放或是升級成獨占鎖

讀完數據后就釋放或是升級成獨占鎖

不加鎖,以版本來控制

讀完數據后就釋放或升級成獨占鎖

獨占

事務結束才釋放

事務結束才釋放

不加鎖,以版本來控制

事務結束才釋放

?

九、動態鎖定管理

數據庫引擎使用動態鎖定管理策略來控制鎖定和系統的最佳成本效益。數據庫引擎可以動態調整數據粒度與鎖定類型,當使用最低一級的行鎖而非更大范圍的頁鎖時,可以降低兩個事務要求相同范圍的數據鎖定的可能性,增強并行訪問的能力,可同時服務更多的用戶,減小死鎖的機率。相反低級鎖轉為高級鎖可以減小系統的資源負擔,但會增加并行爭用的可能性。

此機制由鎖管理器進行管理,每一個鎖都需要內存去記錄,并且要與鎖管理器進行合作,才能完成數據訪問操作,你可以想像當表中有100萬條記錄時,你執行一條沒有where語句的update指令時,在默認情況下數據庫引擎會采用行鎖,但這要記錄100萬條行鎖記錄,以及相關的意向共享鎖,必定會消耗掉大量的系統資源,當系統資源不足時,數據庫引擎會自動提升鎖的級別,也就是由行鎖提升為頁鎖,如果資源還是不足,則會再次提升,提升為表鎖。

就以上例子來說,如果每個頁可以放200條記錄,則100萬表記錄的行鎖轉為5000個頁鎖,還省掉了大量的意向共享鎖。如果資源還是一足,則可以再次提升鎖級別,提升到表鎖,這樣就只需要一個鎖就可以了。

愈大范圍的鎖花費在管理鎖之上的資源就愈少。但相對來說,同時上線并發訪問該資源的人數就越少。例如:或采用行鎖,則你訪問你的記錄,我訪問我的記錄,互相不影響,但如果升級到頁鎖,則如果你先搶到該分頁,而我要訪問的記錄又恰恰在這一分頁上,則我必須要等你釋放該分頁之后才能訪問。如果升級到表鎖,則同一時間,該表中的記錄只能一個人才能訪問,其他人不能訪問。如下圖。

?

?

?

一般情況下,是不需要手工去設置鎖定范圍的,可以由Microsoft?SQL?Server?數據庫引擎視情況而定,使用動態鎖定策略確定最經濟的鎖。?執行查詢時,數據庫引擎會根據架構和查詢的特點自動決定最合適的鎖。?例如,為了縮減鎖定的開銷,優化器可能在執行索引掃描時在索引中選擇頁級鎖。

動態鎖定具有下列優點:

·?簡化數據庫管理。?數據庫管理員不必調整鎖升級閾值。

·?提高性能。?數據庫引擎通過使用適合任務的鎖使系統開銷減至最小。

·?應用程序開發人員可以集中精力進行開發。?數據庫引擎將自動調整鎖定。

在?SQL?Server?2008?中,鎖升級的行為已發生改變,其中引入了?LOCK_ESCALATION選項

轉載于:https://www.cnblogs.com/chillsrc/archive/2013/04/27/3047547.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378497.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378497.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378497.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何測定拼色染液中,各染料在不同染色時間時,染液中殘留染料量及織物上吸附上染的染料量?

如何測定拼色染液中,各染料在不同染色時間時,染液中殘留染料量及織物上吸附上染的染料量? 標準答案: 通常依據各染料對特定波長光的吸光度具有加和性;吸光度值符合朗伯比爾定律,吸光度與濃度成正比;吸光度值分光光度計可以讀出;通過聯立方程,可以求出拼色各染料在染液中…

oracle云數據庫 免費的嗎,使用免費的Oracle云服務-創建ATP數據庫

前面我們講了在Oracle的云主機安裝數據庫,雖然現在安裝數據庫已經很簡單了,但是真正要在生產環境使用,還是需要進行很多配置和優化的,這通常需要專業的人員。而ATP(自治事務性數據庫服務)正是Oracle云提供的非常強大的數據庫云服務…

golang判斷結構體為空_如何在Golang中檢查結構是否為空?

golang判斷結構體為空The size of an empty structure is zero in Golang. Here, empty structure means, there is no field in the structure. 在Golang中, 空結構的大小為零。 在此, 空結構表示該結構中沒有字段。 Eg: 例如: Type struc…

智能車復工日記【5】:起跑線的識別與車庫入庫

博主聯系方式: QQ:1540984562 QQ交流群:892023501 群里會有往屆的smarters和電賽選手,群里也會不時分享一些有用的資料,有問題可以在群里多問問。 系列文章 【智能車Code review】—曲率計算、最小二乘法擬合 【智能車Code review】——坡道圖像與控制處理 【智能車Code re…

文本框只允許輸入數字.net/javascript

<input type"text" name"test" onKeyUp"test1.value(this.valuethis.value.replace(/\D/g,).substring(0,6)).substring(0,3)" > <br /><input name"test1" type"text" > 用Up和Down有區別 只能輸入數字、…

jquery全選,jquery全不選,jquery反選

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head> <title>全選&#xff0c;不…

obj[]與obj._Ruby中帶有示例的Array.rassoc(obj)方法

obj[]與obj.Array.rassoc(obj)方法 (Array.rassoc(obj) Method) In this article, we will study about Array.rassoc(obj) method. You all must be thinking the method must be doing something which is related to the insertion of a certain element. It is not as simp…

oracle平均活動會話數,Oracle11g r2的活動會話數問題解決

如果你在Oracle11g r2的活動會話數的實際操作中&#xff0c;你對Oracle11g r2的活動會話數有不解之處時&#xff0c;你可以通過以下的文章對其的實際應用與功能有所了解&#xff0c;以下是文章的具體介紹&#xff0c;望你瀏覽完以下的內容會有所收獲。在Oracle11g r2的活動會話…

請分析比較下列四種染料在相同濃度和相同溫度的水染液中的聚集度大小?

請分析比較下列四種染料在相同濃度和相同溫度的水染液中的聚集度大小? 標準答案: 染料聚集度從大到小的順序為:3〉1〉4〉2 比較1-4染料結構差異,1、2共軛體系較短,3、4共軛體系較長,1、3磺酸基在端部,2、4磺酸基在中間; 染料3共軛體系長,范德華力大,而水溶性磺酸基團…

分割范圍Codeforces Round #181 (Div. 2)

每日一貼,今天的內容關鍵字為分割范圍 標題鏈接 A &#xff0c;B雖然是水題&#xff0c;但要是沒想清晰就易容掉進某個坑里。。 C&#xff1a;預處理出有所可能的和&#xff0c;然后個每個每和分給a b兩個數 D&#xff1a;競賽的時候標題沒看懂&#xff0c;題意就是說在一個n*n…

VC++動態鏈接庫深入淺出(轉)

1.概論  先來闡述一下DLL(Dynamic Linkable Library)的概念&#xff0c;你可以簡單的把DLL看成一種倉庫&#xff0c;它提供給你一些可以直接拿來用的變量、函數或類。在倉庫的發展史上經歷了“無庫&#xff0d;靜態鏈接庫&#xff0d;動態鏈接庫”的時代。 靜態鏈接庫與動態鏈…

智能車復工日記【6】:有bug的模糊PID記錄

目錄 系列文章DYY Warning算法參考鏈接:代碼.c文件.h文件調用方法希望有大佬能幫我指正錯誤之處。以后假如有機會的話再搞這個模糊吧,頭疼!!!系列文章 【智能車Code review】—曲率計算、最小二乘法擬合 【智能車Code review】——坡道圖像與控制處理 【智能車Code review…

車刀 matlab,可轉位車刀的結構

內容介紹原文檔由會員 違規屏蔽12 發布摘 要隨著有限元技術的快速發展&#xff0c;結構優化在航空航天、建筑、汽車、工程機械等領域的結構設計方面應用越來越廣泛。在刀具行業中&#xff0c;新型刀具材料不斷涌現&#xff0c;刀具的結構也在不斷發展&#xff0c;目前針對刀具的…

DtCms.Model.Advertising.cs

using System; namespace DtCms.Model {/// <summary>/// 廣告位實體類Advertising/// </summary>[Serializable]public class Advertising{public Advertising(){ }#region Modelprivate int _id;private string _title;private int _adtype;private string _adre…

分析染色溫度對染色熱力學性能和染色動力學性能的影響?實際生產時,染色溫度選擇應考慮哪些因素?舉例說明?并闡明實現低溫染色的原理。

分析染色溫度對染色熱力學性能和染色動力學性能的影響?實際生產時,染色溫度選擇應考慮哪些因素?舉例說明?并闡明實現低溫染色的原理。 答:染料的結構包括物理結構和化學結構,溫度高低會影響染料結構,影響染料在染浴中的狀態,染料的溶解、聚集、電離等性能,從而影響染…

c++stl和std_std :: replace()函數以及C ++ STL中的示例

cstl和stdC STL std :: replace()函數 (C STL std::replace() function) replace() function is a library function of algorithm header, it is used to replace an old value with a new value in the given range of a container, it accepts iterators pointing to the s…

《Two Dozen Short Lessons in Haskell》(二十)分數

《Two Dozen Short Lessons in Haskell》&#xff08;Copyright © 1995, 1996, 1997 by Rex Page&#xff0c;有人翻譯為Haskell二十四學時教程&#xff0c;該書如果不用于贏利&#xff0c;可以任意發布&#xff0c;但需要保留他們的copyright&#xff09;這本書是學習 Ha…

oracle 查詢不能重復,oracle – 如何防止在選擇查詢中選擇重復行?

我被賦予了從Oracle數據庫中選擇關鍵數據的任務,但我注意到我的select正在返回重復的行.我不需要它們用于我的報告但我不希望它們刪除它們.有人可以幫助只獲取我需要的數據.我嘗試了以下代碼,但這沒有用.SELECT distinct bbp.SUBCAR "Treadwell",bbp.BATCH_ID "…

數字圖像課程工程大作業分析

試題分析&#xff1a; 在連續的視頻中對火焰及水柱的軌跡檢測&#xff0c;效果如圖。 ** 提示&#xff1a; 1、火焰可利用亮度和顏色 2、水柱的軌跡需要先用背景差分獲得水柱的連通域&#xff0c;然后利用連通域上的像素點進行曲線的擬合&#xff0c;水槍的位置視為已知&#…

設計電子商務網站的10個技巧(轉自ITEye)

導讀&#xff1a;隨著先進科學技術的應用&#xff0c;人們無需外出逛幾個小時來“獵”東西&#xff0c;直接坐在家里就可以購買所需商品&#xff0c;支付服務費用。你只需一臺電腦就能搞定。人們習慣了周到的服務和漂亮的櫥窗&#xff0c;對網店的選擇也不例外。因此&#xff0…