Обґрунтуйте НЕ, використовуючи підказку (nolock) у кожному запиті


23

Вам коли-небудь доводилося виправдовувати НЕ використання підказки для запитів?

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

Я намагався пояснити, що це дозволяє забруднити читання, і вони в кінцевому підсумку виявляться з поганими даними, але вони вважають, що компроміс продуктивності заслуговує на це. (Їх база даних - це безлад; недарма у них проблеми з продуктивністю.)

Якщо у вас є чіткий приклад того, як подати справу проти цього зловживання NOLOCKнатяком, це буде вдячно.

Відповіді:


17

Ви вибираєте свої битви та битви, як ця не може бути легко виграна. У нас є система, де кожен DML натякається натяком ROWLOCK (незалежно від зміни одного рядка або декількох тисяч рядків). Я показав кілька прикладів, чому це дійсно шкодить продуктивності, але оскільки система вже працює, є опір змінам. Зауважте, я переконав їх досить НЕ використовувати цей рух вперед.

У NOLOCK є своє місце, але я можу порекомендувати кілька хороших посилань, які б висловили проблеми з його використанням:


11

Раніше це було обговорено на SO:

Визначте дуже зайнятий. У нас великі обсяги (50 к. Нових рядків в секунду, великі агрегати тощо), і ми не бачимо необхідності отримувати хитрі дані.


9

Ви повинні пояснити колегам важливість розуміння рівня ізоляції. Покажіть їм приклади. Найприємніше та найпростіше пояснення, яке я знайшов на плакаті маленької Кендри рівня ізоляції . Запитайте їх, чому вони думають, що вони потребують підказки про блокування. Чому вони не використовують заяви "встановити рівень ізоляції транзакцій ..."? Запитайте, яку саме ситуацію вони хочуть виправити, можливо, у них тупики, блокування .. і т.д. Якщо вони просто не хочуть утримувати замки, вони можуть розглянути рівень ізоляції знімків.

Тільки запитавши їх, ви можете мати чітку картину.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.