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

首頁 > 數據庫 > SQL Server > 正文

SQL Server中的SELECT會阻塞SELECT嗎

2024-08-31 01:05:29
字體:
來源:轉載
供稿:網友

前言

在SQL Server中,我們知道一個SELECT語句執行過程中只會申請一些意向共享鎖(IS) 與共享鎖(S), 例如我使用SQL Profile跟蹤會話86執行SELECT * FROM dbo.TEST WHERE OBJECT_ID =1 這個查詢語句,其申請、釋放的鎖資源的過程如下所示:

SQLServer,SELECT,阻塞

而且從最常見的鎖模式的兼容性表,我們可以看到IS鎖與S鎖都是兼容的,也就是說SELECT查詢是不會阻塞SELECT查詢的。

 

 

現有的授權模式

請求的模式

IS

S

U

IX

SIX

X

意向共享 (IS)

共享 (S)

更新 (U)

意向排他 (IX)

意向排他共享(SIX)

排他 (X)

 

但是在某些特殊場景。你會看到SELECT語句居然“阻塞”SELECT操作,那么SQL Server中SELECT會真的阻塞SELECT操作嗎?我們先構造測試的案例場景,那么先準備測試數據吧

CREATE TABLE TEST (OBJECT_ID INT, NAME VARCHAR(8)); CREATE INDEX PK_TEST ON TEST(OBJECT_ID)   DECLARE @Index INT =0; WHILE @Index < 20BEGIN INSERT INTO TEST SELECT @Index, 'kerry';  SET @Index = @Index +1;END

在會話窗口A中,執行下面SQL語句,模擬一個UPDATE語句正在執行

BEGIN TRANSACTION  UPDATE dbo.TEST SET NAME='Kerry' WHERE OBJECT_ID=1; --ROLLBACK;

會話窗口B中,執行下面的SQL語句

SELECT * FROM dbo.TEST WHERE OBJECT_ID=1

會話窗口C中,執行下面的SQL語句

SELECT * FROM dbo.TEST WHERE OBJECT_ID=1

我實驗的場景下,會話窗口A的會話ID為85,會話窗口B的會話ID為90,會話窗口C的會話ID為87,如下所示

SQLServer,SELECT,阻塞

如下所示,你會看到SELECT語句“阻塞”了SELECT語句,即會話90“阻塞”了會話87, 它們的等待事件都為LCK_M_S,也就是說它們都在等待獲取共享鎖,也許你會置疑這個SQL是否有問題,那么我們使用SP_WHO來查看,你會發現也是如此,如下所示:

SQLServer,SELECT,阻塞

如下所示,我們會發現會話ID為90 、87的會話都在等待類型為RID,Resource為1:24171:1的共享鎖

SQLServer,SELECT,阻塞

其實應該說,會話87、90都在等待RID對象的共享鎖,我們知道共享鎖與意向共享鎖都是兼容的,所以SELECT是不會阻塞SELECT的,那么又怎么解釋這個現象呢?在宋大神的指點下,粗略的翻了Database System Implementaion這本書(很多原理性知識,看起來相當吃力)。里面介紹了在鎖表(lock table)以及Element Info、Handling Lock Requests、Handling Unlocks等概念,有一個有意思的圖所示,

SQLServer,SELECT,阻塞

 

在鎖表(lock table)里,elements info里的鎖的申請是在一個類似隊列的結構。先進先出機制,所以當會話90先進入隊列,它在等待共享鎖(S), 會話87也進入隊列等待共享鎖(S),而且它在會話90的后面(即會話90這個elements info后面的Next指針指向會話87會話的事務),由于兩個會話都被阻塞,這兩個會話的Wait字段都是Yes,由于內部某些機制,會話87顯示阻塞它的會話為90(這個是我個人臆測,實際具體原因有待考究),實質阻塞的源頭還是會話85. 當會話85釋放排它鎖(X)后,會話隊列根據下面幾個原則來處理解鎖(Handling Unlocks):

1: First-come-first-served: Grant the lock request that has been waiting the longest. This strategy guarantees no starvation, the situation where a transaction can wait forever for a lock

先來先服務(隊列的原則):授予鎖等待時間最長的鎖請求,這種策略保證不會餓死(翻譯感覺不貼切),即一個事務不會永遠等待鎖的情況。

2. Priority to shared locks: First grant all the shared locks waiting. Then,grant one update lock, if there are any waiting. Only grant an exclusive lock if no others are waiting. This strategy can allow starvation, if a transaction is waiting for a U or X lock.

共享鎖優先,首先授予所有等待共享鎖(S),然后授予其中一個更新鎖(U),如果有其它類型等待,只有在沒有其它鎖等待時,才授予排它鎖、這一策略允許等待更新鎖或排它鎖的事務餓死(結束)

3. Priority to upgrading: If there is a transaction with a U lock waiting to upgrade it to an X lock, grant that first. Otherwise, follow one of the other strategies mentioned.

鎖升級優先,如果有一個持有共享鎖(U)等待升級Wie排他鎖(X),那么先授予它排它鎖,否則采用前面已經提到的策略中的一個。

按照這些原則,當會話85釋放了排它鎖(X)后,調度器(Scheduler)應該會根據先后順序依次授予會話90、87共享鎖(S),兩者的阻塞會幾乎同時消失。 這個可以也可以通過實驗進行一個大概的推斷, 在上面實驗中,你可以手工取消90會話的查詢操作,然后再查看阻塞情況,就會發現會話87被85阻塞了。這個阻塞的源頭就變成了85,而不是90了。

PS:上面是個人結合一些知識和理解,做的一些膚淺的判斷與分析,如果不對的地方,敬請指正!

參考資料:

Database System Implementaion

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产视频精品一区二区三区| 久精品免费视频| 自拍偷拍亚洲区| 91欧美精品成人综合在线观看| 国模吧一区二区| 国产成人久久精品| 国产97免费视| 伊人成人开心激情综合网| 亚洲精品小视频在线观看| 亚洲综合色激情五月| 国产精品久久久久久av下载红粉| 日韩大陆欧美高清视频区| 国产精品久久久久久久久久三级| 欧美日韩高清在线观看| 在线亚洲午夜片av大片| 青青草一区二区| 成人午夜一级二级三级| 久久久精品亚洲| 国产精品69久久| 国产精品久久国产精品99gif| 欧美日韩国产色| 亚洲精品国产拍免费91在线| 国产精品一区二区三区免费视频| 91探花福利精品国产自产在线| 亚洲第一精品久久忘忧草社区| 亚洲国产婷婷香蕉久久久久久| 日韩福利视频在线观看| 国产精品日韩欧美综合| 中日韩美女免费视频网站在线观看| 久久久精品美女| 久久久国产精彩视频美女艺术照福利| 亚洲午夜精品久久久久久久久久久久| 日韩成人在线观看| 欧美亚洲成人xxx| 亚洲毛片在线观看.| 久久久久久国产精品久久| 久久综合88中文色鬼| 国产情人节一区| 97在线视频免费播放| 日韩av在线播放资源| 国产美女高潮久久白浆| 97国产精品视频人人做人人爱| 国产精品羞羞答答| 18一19gay欧美视频网站| 97免费视频在线| 日韩欧亚中文在线| 日韩电影中文 亚洲精品乱码| 91在线色戒在线| 精品中文字幕久久久久久| 亚洲欧美日韩综合| 久久国产精品99国产精| 91精品在线观| 中文字幕欧美视频在线| 91免费观看网站| 岛国av一区二区三区| 国内揄拍国内精品少妇国语| 亚洲激情自拍图| 亚洲一区第一页| 久久免费视频这里只有精品| 欧美香蕉大胸在线视频观看| 亚洲а∨天堂久久精品喷水| 日韩精品在线免费| 国产欧美日韩最新| 中文字幕成人精品久久不卡| 韩国精品美女www爽爽爽视频| 国产在线观看一区二区三区| 国产在线久久久| 精品亚洲一区二区| 超碰日本道色综合久久综合| 欧美激情视频在线免费观看 欧美视频免费一| 精品欧美国产一区二区三区| 精品久久久91| 国产精品久久不能| 亚洲a一级视频| 日韩第一页在线| 在线免费观看羞羞视频一区二区| 国产精品免费一区二区三区都可以| 国产亚洲a∨片在线观看| 欧美日韩国产一区中文午夜| 国产精品高潮呻吟久久av无限| 精品久久久久久久大神国产| 日韩免费av片在线观看| 精品久久中文字幕久久av| 欧美体内谢she精2性欧美| 亚洲无限乱码一二三四麻| 一个人www欧美| 久久久精品视频成人| 欧美性xxxx极品高清hd直播| 少妇精69xxtheporn| 日韩在线观看成人| 国产午夜精品一区二区三区| 亚洲成色777777女色窝| 91九色视频在线| 国产成人精品一区| 97香蕉超级碰碰久久免费的优势| 国产香蕉一区二区三区在线视频| 羞羞色国产精品| 国产精品无av码在线观看| 中文字幕亚洲激情| 欧美成人精品在线视频| 亚洲在线观看视频| 精品久久久久久久久久久| 伊人成人开心激情综合网| 97精品一区二区视频在线观看| 亚洲石原莉奈一区二区在线观看| 国产精品看片资源| 国产精品成人一区二区三区吃奶| 欧美日韩国产丝袜美女| 精品国产电影一区| 97热在线精品视频在线观看| 欧美激情亚洲激情| 国产精品91久久久久久| 日韩一区二区精品视频| 久久免费精品视频| 97超碰色婷婷| 亚洲激情在线视频| 国产一区二区黄| 日韩美女av在线免费观看| 国产午夜精品麻豆| 欧美丝袜一区二区| 日韩大胆人体377p| 亚洲a∨日韩av高清在线观看| 国产91在线播放| 中文字幕久精品免费视频| 国产精品视频久久久| 青青草精品毛片| 欧美尤物巨大精品爽| 久久久91精品国产一区不卡| 91av网站在线播放| 亚洲国产小视频| 久久精品视频亚洲| 国语自产精品视频在线看抢先版图片| 成人精品一区二区三区电影免费| 日韩在线观看免费av| 久久久久久这里只有精品| 欧美精品情趣视频| 中文一区二区视频| 中文日韩在线视频| 91po在线观看91精品国产性色| 日本欧美在线视频| 久久成人国产精品| 亚洲欧美一区二区精品久久久| 日韩成人在线观看| 欧美激情va永久在线播放| 97在线观看视频| 国产有码在线一区二区视频| 欧美日韩中文字幕综合视频| 色香阁99久久精品久久久| 国产精品久久久久久久天堂| 久久久久久一区二区三区| 欧美日韩中国免费专区在线看| 亚洲色图欧美制服丝袜另类第一页| 欧美成人免费全部观看天天性色| 伊人伊成久久人综合网站| 日韩成人av在线| 欧美日韩国产中文精品字幕自在自线| 欧美丰满老妇厨房牲生活| 欧美精品激情在线观看| 久久久久久国产精品三级玉女聊斋| 亚洲精品资源美女情侣酒店| 久久香蕉频线观| 精品无码久久久久久国产| 国产日韩欧美另类| 亚洲国产精彩中文乱码av在线播放|