SQL Server 快照隔離

SQL Server 的早期版本支持 SQL-92 標(biāo)準(zhǔn)中定義的四個隔離級別:
READ UNCOMMITTED 是限制性最弱的隔離級別袭异,因為該級別忽略其他事務(wù)放置的鎖烟号。 使用 READ UNCOMMITTED 級別執(zhí)行的事務(wù)商膊,可以讀取尚未由其他事務(wù)提交的修改后的數(shù)據(jù)值售睹;這些行為稱為“臟”讀尊残。
READ COMMITTED 是 SQL Server 默認(rèn)的隔離級別绍些。 該級別通過指定語句不能讀取其他事務(wù)已修改但是尚未提交的數(shù)據(jù)值捞慌,禁止執(zhí)行臟讀。 在當(dāng)前事務(wù)中的各個語句執(zhí)行之間柬批,其他事務(wù)仍可以修改啸澡、插入或刪除數(shù)據(jù),從而產(chǎn)生無法重復(fù)的讀操作氮帐,或“影子”數(shù)據(jù)嗅虏。
REPEATABLE READ 是比 READ COMMITTED 限制性更強(qiáng)的隔離級別。 該級別包括 READ COMMITTED上沐,并且另外指定了在當(dāng)前事務(wù)提交之前皮服,其他任何事務(wù)均不可以修改或刪除當(dāng)前事務(wù)已讀取的數(shù)據(jù)。 并發(fā)性低于 READ COMMITTED,因為已讀數(shù)據(jù)的共享鎖在整個事務(wù)期間持有龄广,而不是在每個語句結(jié)束時釋放硫眯。
SERIALIZABLE 是限制性最強(qiáng)的隔離級別,因為該級別鎖定整個范圍的鍵择同,并一直持有鎖两入,直到事務(wù)完成。 該級別包括 REPEATABLE READ敲才,并增加了在事務(wù)完成之前裹纳,其他事務(wù)不能向事務(wù)已讀取的范圍插入新行的限制。


鋪墊了這么多紧武,終于介紹到了今天的主角痊夭,"快照”一詞反映的情況是:事務(wù)中的所有查詢根據(jù)事務(wù)開始那一刻數(shù)據(jù)庫的狀態(tài),看到數(shù)據(jù)庫的相同版本(即快照)脏里。 不會在快照事務(wù)中的基礎(chǔ)數(shù)據(jù)行或數(shù)據(jù)頁上獲取鎖她我,這樣可以執(zhí)行其他事務(wù),而不會被以前未完成的事務(wù)所阻止迫横。 修改數(shù)據(jù)的事務(wù)不會阻止讀取數(shù)據(jù)的事務(wù)番舆,讀取數(shù)據(jù)的事務(wù)不會阻止寫入數(shù)據(jù)的事務(wù),就好像通常情況下在 SQL Server 中使用默認(rèn)的 READ COMMITTED 隔離級別一樣矾踱。 這種無阻止的行為也大大降低了復(fù)雜事務(wù)出現(xiàn)死鎖的可能性恨狈。
SQL Server 通過引入 SNAPSHOT 隔離級別并另外實現(xiàn) READ COMMITTED 而引入了對 SQL-92 隔離級別的擴(kuò)展。READ_COMMITTED_SNAPSHOT 隔離級別可以透明地替換所有事務(wù)的 READ COMMITTED呛讲。

  • SNAPSHOT 隔離指定在一個事務(wù)中讀取的數(shù)據(jù)永遠(yuǎn)不會反映其他同時進(jìn)行的事務(wù)所作的更改禾怠。
  • 事務(wù)使用事務(wù)開始時存在的數(shù)據(jù)行版本。
  • 在讀取數(shù)據(jù)時不會對數(shù)據(jù)放置任何鎖贝搁,所以吗氏,SNAPSHOT 事務(wù)不會阻止其他事務(wù)寫入數(shù)據(jù)。
  • 寫入數(shù)據(jù)的事務(wù)不會阻止快照事務(wù)讀取數(shù)據(jù)雷逆。
    啟用快照隔離之后弦讽,每個事務(wù)的已更新行版本在 tempdb 中維護(hù)。 唯一的事務(wù)序列號標(biāo)識每個事務(wù)膀哲,并且為每個行版本記錄這些唯一的編號往产。 事務(wù)使用序列號在事務(wù)序列號之前的最新行版本。 事務(wù)將忽略在事務(wù)開始之后創(chuàng)建的更新的行版本某宪。

快照隔離和行版本化的工作原理

啟用 SNAPSHOT 隔離級別時仿村,每次更新行時,SQL Server 數(shù)據(jù)庫引擎在 tempdb 中存儲原始行的副本兴喂,并為該行添加事務(wù)序列號蔼囊。
以下是發(fā)生的事件序列:

  • 新的事務(wù)啟動包颁,并為該事務(wù)分配一個事務(wù)序列號。
  • 數(shù)據(jù)庫引擎在事務(wù)中讀取某行压真,并從 tempdb 中檢索其序列號與事務(wù)序列號最接近并且小于事務(wù)序列號的行版本娩嚼。
  • 數(shù)據(jù)庫引擎檢查事務(wù)編號是否不在未提交事務(wù)的事務(wù)編號列表中,這些未提交事務(wù)是在快照事務(wù)開始時進(jìn)入活動狀態(tài)的滴肿。
  • 事務(wù)從 tempdb 中讀取自事務(wù)開始以來最新的行版本岳悟。
    事務(wù)不會看到事務(wù)開始后插入的新行,因為這些序列號值將大于事務(wù)序列號的值泼差。
  • 當(dāng)前事務(wù)將看到事務(wù)開始后刪除的行贵少,因為 tempdb 中的行版本具有更低的序列號值。
    快照隔離的實際效果是事務(wù)看到在事務(wù)開始時存在的所有數(shù)據(jù)堆缘,不會在基礎(chǔ)表上授予或放置任何鎖滔灶。 在存在爭用的情況下,這樣可以改進(jìn)性能吼肥。
    快照事務(wù)始終使用開放式并發(fā)控制录平,不賦予可能阻止其他事務(wù)更新行的任何鎖。 如果快照事務(wù)嘗試提交對事務(wù)開始后已更改的行的更新缀皱,事務(wù)將回滾并引發(fā)錯誤斗这。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市啤斗,隨后出現(xiàn)的幾起案子表箭,更是在濱河造成了極大的恐慌,老刑警劉巖钮莲,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件免钻,死亡現(xiàn)場離奇詭異,居然都是意外死亡崔拥,警方通過查閱死者的電腦和手機(jī)极舔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來握童,“玉大人姆怪,你說我怎么就攤上這事≡杓ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵俺附,是天一觀的道長肥卡。 經(jīng)常有香客問我,道長事镣,這世上最難降的妖魔是什么步鉴? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上氛琢,老公的妹妹穿的比我還像新娘喊递。我一直安慰自己,他們只是感情好阳似,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布骚勘。 她就那樣靜靜地躺著,像睡著了一般撮奏。 火紅的嫁衣襯著肌膚如雪俏讹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天畜吊,我揣著相機(jī)與錄音泽疆,去河邊找鬼。 笑死玲献,一個胖子當(dāng)著我的面吹牛殉疼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捌年,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼株依,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了延窜?” 一聲冷哼從身側(cè)響起恋腕,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逆瑞,沒想到半個月后荠藤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡获高,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年哈肖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片念秧。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡淤井,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出摊趾,到底是詐尸還是另有隱情币狠,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布砾层,位于F島的核電站漩绵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏肛炮。R本人自食惡果不足惜止吐,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一宝踪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碍扔,春花似錦瘩燥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至套鹅,卻和暖如春站蝠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卓鹿。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工菱魔, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吟孙。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓澜倦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親杰妓。 傳聞我的和親對象是個殘疾皇子藻治,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容