Что может произойти в результате использования (nolock) на каждом SELECT в SQL Server?

Я понимаю, что (nolock) Подсказка оптимизатора допускает "грязное чтение", но при каких очень специфических сценариях это плохая идея? Я никогда не видел такого широкого использования (nolock) в организации, и это заставляет меня нервничать. Я хотел бы объяснить с точки зрения пользовательских историй. "Павел делает A, Питер делает B, X происходит вместо Y".

3 ответа

Решение

Перепостим этот ответ:


NOLOCK значит не ставить замки вообще.

Ваш запрос может вернуть части данных, как и раньше UPDATE и порции после UPDATE в одном запросе.

Мол, дебет без кредита и тому подобное.

Например, я только что выполнил этот запрос на большой таблице:

SELECT  SUM(LEN(name))
FROM    master WITH (NOLOCK)
OPTION (MAXDOP 1)

---
18874367

Все nameдлина 1,

Затем я перезапускаю его и в середине запроса обновляю таблицу:

UPDATE  master
SET     name = 'tt'
WHERE   id <= 10000

SELECT  SUM(LEN(name))
FROM    master WITH (NOLOCK)
OPTION (MAXDOP 1)

---
18874944

Как мы видим, этот запрос заметил 577 строки как обновленные (длина 2), все остальные строки не обновлены (длина 1).

SELECT  SUM(LEN(name))
FROM    master WITH (NOLOCK)
OPTION (MAXDOP 1)

---
18884367

И этот запрос, запускаемый сразу после завершения предыдущего, видит все обновления.

Смотрите эту ссылку для примеров.

http://blogs.msdn.com/davidlean/archive/2009/04/06/sql-server-nolock-hint-other-poor-ideas.aspx

Недавно я потратил много времени на то, чтобы выяснить и заблокировать проблемы для процесса построения хранилища данных. Оказывается, из-за того, что данные для загрузки хранилища доступны только для чтения, я добавил подсказки nolock к запросам исходных данных для etl, чтобы уменьшить потребность в эскалации блокировки на сервере sql и не допустил сбоя загрузки etl., Для этого у меня было очень мало контроля над сервером SQL и приложением. Опять же, это было целевое решение, и я не рекомендую широко использовать какие-либо подсказки для запросов в качестве общего правила. Как и во всех тестах и ​​обзорах производительности, есть ключевые области, на которые нужно обратить внимание, чтобы определить, в чем заключается проблема и как лучше всего ее решить.

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