SQL 2005: подсказка NOLOCK значительно увеличивает чтение. WTF? - PullRequest
2 голосов
/ 14 января 2009

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

Подробнее: Запрос:

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

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

Ответы [ 2 ]

1 голос
/ 14 января 2009

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

EDIT

Демонстрация чтения 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)
0 голосов
/ 14 января 2009

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

...