З (НОЛОК) - НАСТРОЙКА РІВНЯ ІЗОЛЯЦІЇ ТРАНЗАКЦІЇ ЧИТАТИ НЕЗАКОННО


118

Чи міг би хтось дати мені певні рекомендації щодо того, коли я повинен використовуватись, WITH (NOLOCK)а неSET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

Які плюси / мінуси кожного? Чи є якісь ненавмисні наслідки, з якими ви стикаєтесь з використанням одного на відміну від іншого?

Відповіді:


105

Вони те саме. Якщо ви використовуєте set transaction isolation levelоператор, він застосовуватиметься до всіх таблиць з'єднання, тому, якщо ви хочете, щоб лише nolockодна чи дві таблиці використовували це; в іншому випадку використовуйте інший.

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


Поміркуйте, REPEATABLE READзамість того, SERIALIZABLEякщо вам не байдуже дані про фантоми. SERIALIZABLEНАДАЛЬНО обмежуючий характер і майже ніколи не повинен використовуватися (за винятком, наприклад, у деяких критичних фінансових додатках).
Криптос

25

З (NOLOCK) - підказка на рівні таблиці. Встановлення рівня ізоляції транзакцій READ_UNCOMMITTED з впливом на з'єднання. Різниця полягає в обсязі. Дивіться READUNCOMMITTED та NOLOCK в документації на SQL Server тут:

http://technet.microsoft.com/en-us/library/ms187373.aspx

ДЛЯ РОЗВИТКУ ІЗОЛЯЦІЇ ТРАНЗАКЦІЇ: http://technet.microsoft.com/en-us/library/ms173763.aspx


10
  • NOLOCK є локальним для таблиці (або переглядів тощо)
  • ЧИТАЙТЕ НЕЗАМЕЖЕНО за сеанс / з'єднання

Що стосується вказівок ... випадковий пошук від StackOverflow та електричної переплетення ...


Останнє посилання "Чому користуватися NOLOCK погано .." більше не існує.
сангам

1
електричне переплетення - безцінне. дякую за те, що ти додав сонячного світла до мого дня.
JJS

9

Наскільки мені відомо, єдина різниця - це масштаби наслідків, як сказав Строммі. НОЛОК натяк на стіл, і ЧИТАЙТЕ НЕЗАБАВЛЕНО на сесії.

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

Я особисто не думаю, що з цим не бачив жодних проблем, але це може бути більше через те, як я використовую нолок. Потрібно знати, що є сценарії, коли це буде добре використовувати. Сценарії, де ви в основному додаєте нові дані до таблиці, але є інший процес, який входить позаду, щоб перевірити сценарій даних. Це, ймовірно, буде добре, оскільки основний потік не включає повернення та оновлення рядків під час читання.

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

MVCC

Рівні ізоляції бази даних


+1 Хоча я не потрапляв у аспект READ_UNCOMMITTED "якщо ти", Шон чудово висвітлює це. Також є випадки, коли ти можеш прочитати один і той же рядок двічі на SQL Server (через розбиття сторінки)
Anon246

6

Ви не можете використовувати Встановити рівень ізоляції транзакцій Читання непризначеним у представленні (у вас фактично може бути лише один сценарій), тому вам доведеться використовувати (блокування), якщо повинні бути включені брудні рядки.


4

Оскільки вам доведеться використовувати З (НОЛОК) для кожної таблиці, може бути прикро писати це в кожному пункті ВІД або ПРИЄДНАЙТЕСЬ. Однак у нього є причина, чому його називають "брудним" читанням. Таким чином, ви дійсно повинні знати, коли ви робите його, а не встановлювати його за замовчуванням для області сеансу. Чому?

Забуття на кнопку "NOT" (НОЛОК) може не вплинути на вашу програму дуже драматично, однак, якщо ви не читаєте, чи не хочете, це може змінити ситуацію в певних обставинах.

Тому використовуйте З (NOLOCK), якщо поточні дані вибрані невірно, оскільки вони можуть бути повернуті пізніше. В основному це використовується, коли ви хочете збільшити продуктивність, а вимоги до контексту програми дозволяють йому ризикувати появою непослідовних даних. Однак ви або хтось із відповідальних повинен зважити плюси та мінуси рішення щодо використання З (НОЛОК).

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