Обоснуйте НЕ используя (nolock) подсказку в каждом запросе

23

Вам когда-нибудь приходилось оправдываться, НЕ используя подсказку?

Я вижу WITH (NOLOCK)в каждом запросе, который попадает на очень занятый сервер. Дело в том, что разработчики думают, что он должен быть включен по умолчанию, потому что они ненавидят видеть это в своем коде тысячи раз.

Я пытался объяснить, что он допускает грязное чтение, и в итоге они получат плохие данные, но они считают, что компромисс производительности стоит того. (Их база данных беспорядочная; неудивительно, что у них проблемы с производительностью.)

Если у вас есть четкий пример того, как представить дело против этого злоупотребления NOLOCKподсказкой, это будет оценено.

datagod
источник

Ответы:

17

Вы выбираете свои битвы и битвы, как это не может быть легко выиграна. У нас есть система, в которой каждый DML подсказывается подсказкой ROWLOCK (независимо от изменения одной строки или нескольких тысяч строк). Я привел несколько примеров того, почему это действительно снижает производительность, но поскольку система уже работает, существует сопротивление переменам. Обратите внимание, что я убедил их достаточно, чтобы НЕ использовать это в будущем.

NOLOCK имеет это место, но я могу порекомендовать несколько хороших ссылок, демонстрирующих проблемы его использования:

Санкар Редди
источник
11

Это обсуждалось на SO раньше:

Определить очень занят. У нас большие объемы (50 тыс. Новых строк в секунду, большие агрегаты и т. Д.), И мы не видим необходимости получать слишком сложные данные.

ГБН
источник
9

Вы должны объяснить своим коллегам важность понимания уровней изоляции. Покажите им примеры. Самое приятное и простое объяснение, которое я нашел на плакате Маленькой Кендры об уровнях изоляции . Спросите их, почему они думают, что им нужна подсказка Нолока. Почему они не используют операторы «установить уровень изоляции транзакции ...»? Спросите, какую именно ситуацию они хотят исправить, возможно, у них есть тупики, блокировки ... и так далее. Если они просто не хотят удерживать блокировки, они могут рассмотреть уровень изоляции снимка.

Только спрашивая их, вы можете получить четкую картину.

Мэриан
источник