国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 數據庫 > 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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产乱妇乱子在线播视频播放网站| 天天av综合网| 精品欧美日韩一区二区| 就爱干草视频| 国产在线小视频| 高潮毛片在线观看| 五月综合网站| 国产午夜视频| 91超碰在线免费| 国产偷窥洗澡视频| 精品久久av| 久草视频国产| 国产午夜在线| 亚洲第一页在线播放| 成人日韩欧美| 中文字幕成人乱码在线电影| 五月婷婷丁香激情| 亚洲夜夜综合| 中文字幕日本在线| 精精国产xxxx视频在线动漫| 青青草原av在线| 国产不卡在线| 国产精选一区二区三区不卡催乳| 中文字幕在线资源| 伊人国产在线看一| 最近中文字幕mv免费高清视频8| 国产高清在线看| 日本福利在线| 2019中文字幕视频| 综合激情亚洲| www.狠狠操.com| 精品麻豆一区二区三区| 中文字幕在线资源| 天堂资源在线中文| 国产免费视频| 免费精品国产自产拍观看| 在线国产一级| 伊人福利在线| 国产福利小视频在线| 久久国产精品久久久久久小说| 夜色资源网av在先锋网站观看| 国产亚洲精品自在线观看| 九九热在线视频观看| 99热免费在线| 亚洲人成电影| 日本18视频网站| www.毛片| 二人午夜免费观看在线视频| 欧美性猛交xxxxbbbb| gogo高清在线播放免费| 亚洲精品在线视频免费| 亚洲字幕成人中文在线观看| av激情在线| 中文av资源在线| 在线中文字幕观看| 天天插天天狠天天透| 四虎一区二区三区| 欧美成人久久电影香蕉| 另类视频在线| 国产一起色一起爱| 国产高清自拍视频在线观看| 中文乱码字幕av网站| 亚洲成a人v欧美综合天堂麻豆| 午夜性爽视频男人的天堂| 欧美精品日韩少妇| 中文字幕视频在线| 亚洲an天堂an在线观看| 丁香视频免费观看| 国产一二区视频| 在线观看免费视频一区二区三区| av在线资源网| 国产日产精品久久久久久婷婷| 中文在线有码| 88av在线| 午夜在线视频| 国产亚洲精品拍拍拍拍拍| 在线天堂中文www视软件| 国产在线高清理伦片a| 国产视频xxxx| 欧美性受xxxx免费视频| 国产欧美久久久久久久久 | 国产中文在线| 91xx在线观看| 国产精品自产拍在线网站| 国产对白叫床清晰在线播放| 欧洲有码在线视频| 国产不卡精品一区二区三区| 久热中文字幕精品视频在线| av免费在线观| 国产卡二和卡三的视频| 波多野结衣中文字幕久久| 在线国产一级| 国产成人午夜精品| 国产美女视频网站| 麻豆国产在线视频| 四虎国产精品永久| av黄色在线观看| 国产精品爱久久久久久久小说| 久久久久久五月天久久久久久久久| 中文天堂av| av免费在线一区二区三区| 精品伦理一区二区| 99re热在线观看| 尤物视频在线观看视频| 91黄色在线| 夜色资源网av在先锋网站观看| 国产精品va在线观看视色| 国产福利免费在线观看| 国产高清在线看| 99久久99久久免费精品小说| 国产盗摄一区二区| 69av二区| ·天天天天操| 小说区乱图片区| 狠狠干五月天| 国产无遮挡又黄又爽免费软件| 最新天堂资源在线资源| 国产丝袜在线| 伊人影院在线观看| 男人天堂99| 国产一级在线| 国产二区视频在线观看| 99re在线视频| 蜜桃av在线免费观看| 国产精品亚洲第五区在线| 国产日产一区二区三区| av中文在线| 天堂在线免费观看| av免费在线观| 国产亚洲精品久久久久久青梅 | 在线免费观看你懂的| 青草青在线视频| 中中文字幕av在线| h网站免费在线观看| 天堂在线亚洲| 夜夜爽视频导航| 国产一区二区影视| 中文资源在线官网| 中文字幕在线观看av| www.香蕉视频在线观看| 国产精品秘入口| 狠狠干天天干| 亚洲视频精品在线观看| 国产性网软件大全| 丁香婷婷激情| 欧美精品另类| 香蕉视频在线观看网站| 136福利第一导航国产在线| 国产尤物视频| 免费在线看v| 日本一本久久| 亚洲an天堂an在线观看| 国产一级粉嫩xxxx| 国自产拍在线网站网址视频| 在线欧美一级视频| 伊人影院在线播放| 91蜜桃在线视频| 国产一二三区在线| 国产亚av手机在线观看| 国产精品一区二区资源| 国产美女视频一区二区二三区| www.色婷婷| 黄色在线视频观看网站| 日本一二区视频| 日本黄色免费网址| 欧美日韩性视频一区二区三区| www.91在线播放| 日本三级视频网站| 青青草视频在线观看| 国产中文伊人| 国产精品视频一区二区三区麻豆| 国产精品伦一区二区三区视频 | 国产精品偷乱一区二区三区| 黄色片大全在线观看| 最近免费中文字幕在线第一页| 最新黄网在线观看| 精品久久亚洲一级α| av在线免费播放网站| 开心婷婷激情五月| 国产亚洲精品拍拍拍拍拍| ·天天天天操| 影音先锋在线中文字幕| 奇米影视狠狠狠| 天堂在线免费观看| 精品国产免费观看一区| www网站在线观看| 中文字幕视频在线| av免费在线一区二区三区| 国产真实伦在线观看| 国产黄色片大全| 免费a在线看| 999国产在线视频| 国产在线中文字幕| 精品卡一卡卡2卡3网站| 免费看ww视频网站入口| 国产传媒在线播放| 欧美婷婷久久五月精品三区| 国产污视频在线| 免费电影网站在线视频观看福利| 国产超碰在线观看|