SQL 2005: подсказка NOLOCK значительно увеличивает чтение. WTF?

У меня есть хранимая процедура, которая делает намного больше операций чтения, когда подсказка NOLOCK добавляется в запрос. Я сбит с толку - кто-нибудь знает почему, пожалуйста?

Подробности: запрос:

SELECT * FROM dbo.<table-name> WITH (NOLOCK).

Было выполнено 40000 операций чтения, и в нем менее 2000 строк. Я установил, что большинство этих операций чтения вызваны 3 столбцами TEXT. (Если я пропущу их, число операций чтения снизится до 59!). Но когда я удаляю WITH (NOLOCK), оно увеличивается с 40000 операций чтения до 13000. Я повторил это несколько раз, потому что подумал, что, должно быть, облажался, но это действительно последовательно в обоих направлениях.

2 ответа

NOLOCK читает данные из транзакций, которые не были зафиксированы.

РЕДАКТИРОВАТЬ

Демонстрация чтения NOLOCK незафиксированных данных.

create table table1 (id int, val int)
go

select * from table1 with ( NoLock)
begin tran
insert into table1 values (1,1)

--Switch to new query window
select * from table1 with ( NoLock)
--switch back
rollback tran
select * from table1 with ( NoLock)

Может быть, счетчик считываний включает в себя чтение страниц для чтения блокировок?

Другие вопросы по тегам