時(shí)間:2024-03-13 13:57作者:下載吧人氣:26
前言
在SQL Server中,我們知道一個(gè)SELECT語(yǔ)句執(zhí)行過程中只會(huì)申請(qǐng)一些意向共享鎖(IS) 與共享鎖(S), 例如我使用SQL Profile跟蹤會(huì)話86執(zhí)行SELECT * FROM dbo.TEST WHERE OBJECT_ID =1 這個(gè)查詢語(yǔ)句,其申請(qǐng)、釋放的鎖資源的過程如下所示:
而且從最常見的鎖模式的兼容性表,我們可以看到IS鎖與S鎖都是兼容的,也就是說SELECT查詢是不會(huì)阻塞SELECT查詢的。
現(xiàn)有的授權(quán)模式 |
||||||
請(qǐng)求的模式 |
IS |
S |
U |
IX |
SIX |
X |
意向共享 (IS) |
是 |
是 |
是 |
是 |
是 |
否 |
共享 (S) |
是 |
是 |
是 |
否 |
否 |
否 |
更新 (U) |
是 |
是 |
否 |
否 |
否 |
否 |
意向排他 (IX) |
是 |
否 |
否 |
是 |
否 |
否 |
意向排他共享(SIX) |
是 |
否 |
否 |
否 |
否 |
否 |
排他 (X) |
否 |
否 |
否 |
否 |
否 |
否 |
但是在某些特殊場(chǎng)景。你會(huì)看到SELECT語(yǔ)句居然“阻塞”SELECT操作,那么SQL Server中SELECT會(huì)真的阻塞SELECT操作嗎?我們先構(gòu)造測(cè)試的案例場(chǎng)景,那么先準(zhǔn)備測(cè)試數(shù)據(jù)吧
CREATE TABLE TEST (OBJECT_ID INT, NAME VARCHAR(8));
CREATE INDEX PK_TEST ON TEST(OBJECT_ID)
DECLARE @Index INT =0;
WHILE @Index < 20
BEGIN
INSERT INTO TEST
SELECT @Index, ‘kerry’;
SET @Index = @Index +1;
END
網(wǎng)友評(píng)論