Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Почему нет эскалации блокировок при удалении 5000 строк  [new]
Андрей_Батькович
Member

Откуда:
Сообщений: 82
Здравствуйте!
В документации к MS SQL написано что эскалация помимо прочего возникает при блокировке 5000 строк одной инструкцией TSQL.
Если я делаю вставку в таблицу 5000 строк, тогда эскалация возникает.
Но если запрос на удаление из таблицы 5000 строк, тогда эскалации нет.
В этом собственно и вопрос, почему в этом случае нет эскалации?

Вот пример запроса:
exec sp_executesql N'DELETE FROM T2
FROM dbo._Document939_VT940 T2
WHERE T2._Document939_IDRRef = @P1',N'@P1 varbinary(16)',0x846A001C428537A411E729DABD7A3E3D
25 апр 17, 20:21    [20433792]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет эскалации блокировок при удалении 5000 строк  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36684
И какие блокировки накладывает ваш запрос?
25 апр 17, 20:27    [20433799]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет эскалации блокировок при удалении 5000 строк  [new]
Андрей_Батькович
Member

Откуда:
Сообщений: 82
Гавриленко Сергей Алексеевич,

X блокировку
25 апр 17, 20:34    [20433820]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет эскалации блокировок при удалении 5000 строк  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36684
Андрей_Батькович
Гавриленко Сергей Алексеевич,

X блокировку
Какая неожиданность! И на какие же ресурсы накладывается эта блокировка?
25 апр 17, 20:45    [20433846]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет эскалации блокировок при удалении 5000 строк  [new]
Андрей_Батькович
Member

Откуда:
Сообщений: 82
Гавриленко Сергей Алексеевич,

Блокировка накладывается на кластерный индекс в котором одно поле _Document939_IDRRef
25 апр 17, 21:06    [20433903]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет эскалации блокировок при удалении 5000 строк  [new]
o-o
Guest
Андрей_Батькович
Гавриленко Сергей Алексеевич,

Блокировка накладывается на кластерный индекс в котором одно поле _Document939_IDRRef

блокировки накладываются на ключи/страницы,
вот об этом вас спросили.
так на что наложено?
25 апр 17, 21:13    [20433922]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет эскалации блокировок при удалении 5000 строк  [new]
invm
Member

Откуда: Москва
Сообщений: 9112
Эскалация будет только при блокировке строк.
И не 5000, а когда больше 5000. И возможность эскалации проверяется каждые 1250 блокировок. Итого, эскалация у вас случится, когда будет заблокировано 6250 строк.
25 апр 17, 21:25    [20433940]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет эскалации блокировок при удалении 5000 строк  [new]
Андрей_Батькович
Member

Откуда:
Сообщений: 82
o-o
Андрей_Батькович
Гавриленко Сергей Алексеевич,

Блокировка накладывается на кластерный индекс в котором одно поле _Document939_IDRRef

блокировки накладываются на ключи/страницы,
вот об этом вас спросили.
так на что наложено?


Так бы тогда и написали какая гранулярность.
Блокировка наложена на ключ.
25 апр 17, 21:47    [20434015]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет эскалации блокировок при удалении 5000 строк  [new]
Андрей_Батькович
Member

Откуда:
Сообщений: 82
invm,

На 5 тыс. срабатывает при вставке в таблицу.
Сейчас для примера сделал даже 7 тыс. строк, все равно эскалации нет.
25 апр 17, 21:48    [20434021]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет эскалации блокировок при удалении 5000 строк  [new]
invm
Member

Откуда: Москва
Сообщений: 9112
Андрей_Батькович
все равно эскалации нет
Для таблицы запрещена эскалация.
Либо имеются несовместимые блокировки в других сессиях.
25 апр 17, 21:54    [20434038]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет эскалации блокировок при удалении 5000 строк  [new]
Андрей_Батькович
Member

Откуда:
Сообщений: 82
invm,

Эскалация разрешена, я же говорю что при вставке в таблицу есть эскалация.
25 апр 17, 21:55    [20434040]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет эскалации блокировок при удалении 5000 строк  [new]
o-o
Guest
Андрей_Батькович
Сейчас для примера сделал даже 7 тыс. строк, все равно эскалации нет.

а выполните в той же транзакции вот такое:
select resource_type,
       request_mode,
       resource_associated_entity_id,
       request_session_id,
       count(*) as cnt
from sys.dm_tran_locks
where request_session_id = @@spid
group by resource_type,
       request_mode,
       resource_associated_entity_id,
       request_session_id

и картинку нам завесьте, плиз
25 апр 17, 21:59    [20434047]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет эскалации блокировок при удалении 5000 строк  [new]
o-o
Guest
вот чтобы мы увидели что-то такое, где 7000 блокировок на стэйтмент

К сообщению приложен файл. Размер - 18Kb
25 апр 17, 22:03    [20434062]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет эскалации блокировок при удалении 5000 строк  [new]
o-o
Guest
invm
Либо имеются несовместимые блокировки в других сессиях.

вот, кстати, с учетом этого
тот же код, что и выше, но без фильтра на сессию (чтобы все выдало, кроме resource_type = 'DATABASE') выполните?
а то и правда, мы не знаем, вдруг кто-то IS на таблице держит, да?
begin tran
	insert into dbo.nums1
	select n
	from nums_10
	where n between 1000001 and 1006000

	select resource_type,
		   request_mode,
		   resource_associated_entity_id,
		   request_session_id,
		   count(*) as cnt
	from sys.dm_tran_locks
	where resource_type <> 'DATABASE'
	group by resource_type,
		   request_mode,
		   resource_associated_entity_id,
		   request_session_id
25 апр 17, 22:11    [20434086]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет эскалации блокировок при удалении 5000 строк  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7383
o-o,
автор
вдруг кто-то IS на таблице держит

Подозреваю, что дело обстоит именно так.
26 апр 17, 10:34    [20434874]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет эскалации блокировок при удалении 5000 строк  [new]
Андрей_Батькович
Member

Откуда:
Сообщений: 82
Чертовщина какая-то.
Сегодня повторил опыт еще раз, теперь эскалация появилась.
30 апр 17, 15:53    [20447122]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет эскалации блокировок при удалении 5000 строк  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Андрей_Батькович
Чертовщина какая-то.
Сегодня повторил опыт еще раз, теперь эскалация появилась.

кроме проверки на 5000 строк там ещё несколько вариантов на %ресурсов, и что-то ещё...
30 апр 17, 20:43    [20447482]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить