Теперь в первой сессии выполним обновление записи:
--SET
IMPLICIT_TRANSACTIONS on
update
test set n = 'other' where i = 2
--rollback
А во второй – запрос:
--SET IMPLICIT_TRANSACTIONS on
--select * from test with (readpast)
select * from test with (xlock) where i
= 1
--rollback
Чтобы увидеть блокировки второй сессии, я поставил
хинт xlock. Запрос не заблокируется, давайте посмотрим содержимое syslockinfo
(таблица 16).
spid
dbid
ObjId
IndId
Type
Resource
Mode
Status
55
8
1993058136
0
RID
1:31:00
X
GRANT
55
8
1993058136
0
PAG
1:31
IX
GRANT
54
8
1993058136
0
PAG
1:31
IX
GRANT
55
8
1993058136
3
PAG
1:29
IX
GRANT
55
8
1993058136
0
TAB
IX
GRANT
54
8
1993058136
0
TAB
IX
GRANT
54
8
1993058136
0
RID
1:31:01
X
GRANT
55
8
1993058136
3
KEY
(21001d31a802)
X
GRANT
Как видим, первая сессия наложила монопольную
блокировку на первую строку 1:31:01, а вторая – на нулевую 1:31:00. Кроме
этого, вторая сессия наложила монопольную блокировку на ключ (последняя строка)
и монопольную блокировку намерений на страницу, где располагается индекс (1:29).
Чтобы действительно убедиться, что индекс создан
именно на этой странице, нужно выполнить очередную недокументированную команду: