亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

[翻譯]:SQL死鎖-鎖與事務級別

2024-07-21 02:50:43
字體:
來源:轉載
供稿:網友
[翻譯]:SQL死鎖-鎖與事務級別

其實這一篇呢與解決我項目中遇到的問題也是必不可少的。上一篇講到了各種鎖之間的兼容性,里面有一項就是共享鎖會引起死鎖,如何避免呢,將我們的查詢都設置中read uncommitted是否可行呢?其結果顯示,當我們當所有的查詢都設置成read uncommitted后,后面共享鎖死鎖基本消除了,看來還是管用的。好了下面接著翻譯:

Last timewe discussed a few major lock types that SQL Server uses. Shared(S), Exclusive(X) and Update(U). Today I’d like to talk about transaction isolation levels and how they affect locking behavior. But first, let’s start with the question: “What is transaction?”

上一次我們討論了一些主要的SQL SERVER鎖類型:共享鎖(S),排它鎖(X),以及更新鎖(U)。今天我們來講事務級別是如何影響鎖的行為的。但在這之前,我們需要從一個問題開始:“什么是事務”?

Transaction is complete unit of work. Assuming you transfer money from checking account to saving, system should deduct money from the checking and add it to the saving accounts at once. Even if those are 2 independent Operations, you don’t want it to “stop at the middle”, well at least in the case if bank deducts it from the checking first :) If you don’t want to take that risk, you want them to work as one single action.

事務是一個完整的單元工作模式。假如你從支票帳戶中將錢轉移到儲蓄卡中,銀行系統首先會從你的支票帳戶中扣錢,然后再往你的儲蓄卡中存錢。即使這是兩個相互獨立的操作,你也不想讓其在中間的某一步停止,至少不能停止在銀行將你的錢從支票帳戶中扣除之后:) 。如果你不冒這個風險,那么你希望這兩步操作最好是一步操作來完成。

There is useful acronym – ACID – that describes requirements to transaction:

這里有一個非常有用的編寫-ACID,它將描述事務的需求:

  • (A) – Atomicity or “all or nothing”. Either all changes are saved or nothing changed.

(A)-它代表所有或者是無,要么全部保存要么不保存任何數據

  • (C) – Consistency. Data remains in consistent stage all the time

(C)-數據每時每刻要保持一致性

  • (I) – Isolation. Other sessions don’t see the changes until transaction is completed. Well, this is not always true and depend on the implementation. We will talk about it in a few minutes

(I)-數據隔離,其它的會話看不到事務未提交的數據。這句并不總是正確的,有時依賴于系統的實現,我們后續會講到。

  • (D) – Durability. Transaction should survive and recover from the system failures

(D)-數據可以回滾,當事務執行出現異常的情況下

There are a few common myths about transactions in SQL Server. Such as:

下面是一些公共的關于事務的錯誤觀點,例如:

  • There are no transactions if you call insert/update/delete statements without begin tran/commit statements. Not true. In such case SQL Server starts implicit transaction for every statement. It’s not only violate consistency rules in a lot of cases, it’s also extremely expensive. Try to run 1,000,000 insert statements within explicit transaction and without it and notice the difference in execution time and log file size.

當我們直接寫insert/update/delete這句語句時,如果沒有顯示的寫begin tran/commit 這類語句就不存在事務。這是不正確的,實際上SQL SERVER 會隱式的為每次SQL操作都加了事務。這不光違反了數據一致性規則且往往造成的后果是非常昂貴的??梢匀L試往一個表中插入1000000條數據,第一種顯示的加上事務語句,第二種不加事務語句,執行之后對比下執行的時間以及日志大小的不同。

  • There is no transactions for select statements. Not true. SQL Server uses (lighter) transactions with select statements.

當執行select語句時沒有事務。這是不正確的,SQL SERVER會使用輕量級的事務。

  • There is no transactions when you have (NOLOCK) hint. Not true. (NOLOCK) hint downgrades the reader to read uncommitted isolation level but transactions are still in play.

當們們在select語句后面加了nolock后,就沒有事務了。這也是不正確的。nolock只是降低了事務必有隔離級別為read uncommitted而已并不是沒有事務。

Each transaction starts in specific transaction isolation level. There are 4 “pessimistic” isolation levels: Read uncommitted, read committed, repeatable read and serializable and 2 “optimisitic” isolation levels: Snapshot and read committed snapshot. With pessimistic isolation levels writers always block writers and typically block readers (with exception of read uncommitted isolation level). With optimistic isolation level writers don’t block readers and in snapshot isolation level does not block writers (there will be the conflict if 2 sessions are updating the same row). We will talk about optimistic isolation levels later.

每個事務都在指定的事務級別中,這里有四種悲觀事務必有隔離級別:Read uncommitted (允許臟讀),read committed(不允許臟讀),repeatable(可重復讀),serialzable以及兩種經過優化后的事務級別:Snapshot 以及read committed snapshot。

注:這里事務隔離級別比較多,我理解不也太多,就省略掉了。我們比較常見的就是前面的兩種,允許臟讀以及不允許臟讀的情況。至于后面的有關鏡像相關的內容這里我不做多的翻譯。

Regardless of isolation level, exclusive lock (data modification) always held till end of transaction. The difference in behavior is how SQL Server handles shared locks. See the table below:

排它鎖不管事務級別,它總是占用鎖到整個事務結束:

So, as you can see, in read uncommitted mode, shared locks are not acquired – as result, readers (select) statement can read data modified by other uncommitted transactions even when those rows held (X) locks. As result any side effects possible. Obviously it affects (S) lock behavior only. Writers still block each other.

所以,就像你看到的,如果在允許臟讀的模式下,是不需要申請共享鎖的,可以讀取到其實事務還未完全提交的數據,即使這些數據已經被加上了排它鎖。但這只影響共享鎖,對于寫的會話仍然會存在相互阻塞甚至死鎖的情況。

In any other isolation level (S) locks are acquired and session is blocked when it tries to read uncommitted row with (X) lock. In read committed mode (S) locks are acquired and released immediately. In Repeatable read mode, (S) locks are acquired and held till end of transaction. So it PRevents other session to modify data once read. Serializable isolation level works similarly to repeatable read with exception that locks are acquired on the range of the rows. It prevents other session to insert other data in-between once data is read.

共享鎖可以任意事務隔離級別中發生,當它嘗試去讀取其它事務未提交的數據(行上加了排它鎖)時就是會阻塞。在Read committed 模式下,共享鎖的申請以及釋放都是非常迅速的。在Repeatable read模式下,共享鎖被申請后一直占用到事務結束,它保證其它會話不編輯其已經讀取到的數據。Serializable 模式的工作方式和Repeatable非常相似,但它會鎖定一定范圍的數據,訪問其它會話插入數據。

注:這塊還沒理解到位,后續有時間再補充下。

You can control that locking behavior with “set transaction isolation level” statement – if you want to do it in transaction/statement scope or on the table level with table hints. So it’s possible to have the statement like that:

在你的事務中或者是表級間的查詢你可以通過設置事務隔離級別來控制鎖行為,就像下面的查詢語句:So you access Table1 in read uncommitted isolation level and Table2 in serializable isolation level.

這條語句的作用就是你可以對Table1讀取其它事務未提交的數據,以serializable隔離級別讀取Table2的數據。

It’s extremely easy to understand the difference between transaction isolation levels behavior and side effects when you keep locking in mind. Just remember (S) locks behavior and you’re all set.

這將非常容易理解事務隔離級別行為之間的差別以及它們的副作用,你只需要記住共享鎖以及你所有的設置。

Next time we will talk why do we have blocking in the system and what should we do to reduce it.

下一次我們將會講到為什么我們的系統中會存在阻塞以及我們如何做才能減少阻塞的發生


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品调教chinesegay| 欧美日韩国产91| 亚洲国产日韩欧美在线图片| 日韩精品中文字幕在线播放| 亚洲午夜性刺激影院| 久久露脸国产精品| 亚洲精品在线观看www| 久久精品国产综合| 午夜精品久久久久久久99热浪潮| 一区二区欧美久久| 亚洲国产精品久久久久| 久久久久久久激情视频| 亚洲影院色在线观看免费| www国产精品视频| 97精品国产aⅴ7777| 日韩av男人的天堂| 亚州精品天堂中文字幕| 2019中文在线观看| 久久精品91久久久久久再现| 日韩av网站电影| 一区二区三区四区在线观看视频| 国内精品一区二区三区四区| 日本欧美精品在线| 日产精品久久久一区二区福利| 黑丝美女久久久| 亚洲精品久久久久久下一站| 久久久久亚洲精品| 欧美激情免费观看| 国产色婷婷国产综合在线理论片a| 日本韩国在线不卡| 亚洲天堂网站在线观看视频| 成人国产精品色哟哟| 欧美最顶级的aⅴ艳星| 亚洲少妇中文在线| 亚洲精品一区二区久| 91禁国产网站| 性色av一区二区三区| 亚洲最大av网| 国产91精品久久久久久| 国产一区二区黑人欧美xxxx| 亚洲社区在线观看| 日韩国产高清污视频在线观看| 韩国美女主播一区| 亚洲精品av在线| 97香蕉超级碰碰久久免费的优势| 日韩电影免费在线观看中文字幕| 成人黄色生活片| 成人国产在线激情| 91久久精品日日躁夜夜躁国产| 日韩高清av在线| 欧美综合在线第二页| 成人免费激情视频| 97**国产露脸精品国产| 成人国产精品久久久| 国产aⅴ夜夜欢一区二区三区| 国产精品久久久久久亚洲调教| 91国内产香蕉| 欧美激情精品久久久久久变态| 亚洲一区二区三区久久| 亚洲xxxx做受欧美| 国产视频自拍一区| 国产精品一区二区av影院萌芽| 亚洲精品欧美极品| 成人网址在线观看| 日韩在线一区二区三区免费视频| 国产精品久久久久高潮| 91精品国产色综合| 国产成人91久久精品| 亚洲电影中文字幕| 亚洲欧美精品一区二区| 亚洲香蕉成人av网站在线观看| 欧美激情久久久久| 91免费综合在线| 少妇高潮 亚洲精品| 欧美一级电影免费在线观看| 欧美高清不卡在线| 亚洲欧美中文另类| 亚洲天堂网站在线观看视频| 色噜噜久久综合伊人一本| 国产精品免费观看在线| 亚洲精品中文字| 精品无人区乱码1区2区3区在线| 成人情趣片在线观看免费| 91精品国产综合久久久久久久久| 日韩欧美在线中文字幕| 欧美夫妻性生活xx| 欧美激情精品久久久久久变态| 欧美性xxxx极品hd欧美风情| 国产精品丝袜视频| 国产免费观看久久黄| 777777777亚洲妇女| 青草青草久热精品视频在线观看| www.欧美三级电影.com| 欧美激情中文网| 国产精品视频一区国模私拍| 欧美日韩福利视频| 欧美一区二区三区艳史| 日韩电影中文 亚洲精品乱码| 国产亚洲精品久久久久久牛牛| 久久久国产精品视频| 国产精品www色诱视频| 九九视频这里只有精品| 欧美制服第一页| 亚洲欧美国产va在线影院| 国产精品久久久久久久9999| 国产精品99久久久久久人| 亚洲毛片在线观看| 久久久久久久av| 国产日韩av在线| 91精品久久久久久久久中文字幕| 国产精品久久久久久久久免费看| 国产成人拍精品视频午夜网站| 国语自产在线不卡| 国产精品一区二区三区在线播放| 国内久久久精品| 亚洲成人教育av| 2021国产精品视频| 日韩精品一区二区三区第95| 欧美国产日韩xxxxx| 亚洲国产毛片完整版| 日本亚洲欧洲色α| 国产精品96久久久久久又黄又硬| 亚洲视频一区二区三区| 国产亚洲成精品久久| 久久精品国产成人| 欧美电影在线观看| 日本道色综合久久影院| 欧美一级视频免费在线观看| 亚洲午夜精品久久久久久性色| 欧美成人午夜影院| 成人天堂噜噜噜| 九九热这里只有精品免费看| 久久精品精品电影网| 久久亚洲精品国产亚洲老地址| 九九精品在线视频| 亚洲精品黄网在线观看| 欧美激情aaaa| 亚洲成人激情小说| 欧美精品在线极品| 久久久这里只有精品视频| 国产亚洲视频在线| 国模视频一区二区三区| 成人www视频在线观看| 国产精品视频在线观看| 国产亚洲激情在线| 中文字幕在线看视频国产欧美| 欧美日韩激情视频8区| 欧美性开放视频| 久久免费视频网站| 日韩欧美成人精品| 国产精品欧美激情| 91a在线视频| www.日韩不卡电影av| 国产成人精品在线播放| 久久777国产线看观看精品| 久久国产精品亚洲| 亚洲国产私拍精品国模在线观看| 国产91成人video| 亚洲va久久久噜噜噜久久天堂| 国产欧洲精品视频| 庆余年2免费日韩剧观看大牛| 亚洲精品日韩av| 在线亚洲欧美视频| 国产日韩精品入口|