Я прочитав, що якщо я використовую IsolationLevel.ReadUncommitted, запит не повинен видавати блокування. Однак, перевіривши це, я побачив наступний замок:
Тип ресурсу: HOBT Request_Mode
: S (Спільний)
Що таке замок HOBT? Щось пов’язане з HBT (замок Heap чи Binary Tree)?
Чому я все-таки отримаю S-замок?
Як я можу уникнути спільного блокування під час запиту, не вмикаючи варіант знімка рівня ізоляції?
Я тестую це на SQLServer 2008, і параметр "Знімок" вимкнено. Запит виконує лише вибір.
Я бачу, що потрібен Sch-S, хоча SQL Server, схоже, не відображає його в моєму запиті блокування. Як це все-таки видає Спільний замок? Згідно з:
НАСТРОЙКА РІВНЯ ІЗОЛЯЦІЇ ТРАНЗАКЦІЇ (Transact-SQL)
Операції, що виконуються на
READ UNCOMMITTED
рівні, не видають загальні блокування, щоб запобігти іншим транзакціям змінювати дані, прочитані поточною транзакцією.
Тож я трохи розгублений.