Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 11079|Відповідь: 1

[Джерело] MSSQL З (NOLOCK) брудним читанням

[Копіювати посилання]
Опубліковано 2020-4-3 10:06:04 | | |
Мінуси:

1. Це призведе до брудного читання

2. Застосовується лише до вибіркових запитних операторів

Переваги:

1. Деякі файли вказують, що ефективність запитів SQL за допомогою WITH (NOLOCK) можна підвищити на 33%.

2. Може використовуватися для внутрішніх операторів з'єднання

Брудне читання: Користувач вносить зміну в ресурс, і інший користувач випадково читає змінений запис, після чого перший користувач відмовляється від зміни, і дані повертаються до попередньої — ці два різні результати є брудним читанням.

Деталі:

Щоб покращити продуктивність SQL-запитів, загалом, першим кроком є створення індексу. Насправді, окрім встановлення індексів, коли ми розміщуємо SQL-команди, додавання розділу WITH (NOLOCK) до синтаксису може покращити явище LOCK-наборів даних у середовище з великою кількістю онлайн-запитів, що покращує продуктивність запитів.

Однак варто зазначити, що SQL SELECT з (NOLOCK) може спричиняти брудне читання.

Наприклад:

Окрім простого SELECT, ви також можете використовувати синтаксис SELECT з JOIN. Але команди ВИДАЛИТИ, ВСТАВИТИ, ОНОВИТИ та інші команди, що вимагають транзакцій, — це погано...


Деякі файли стверджують, що ефективність запитів SQL можна підвищити на 33% за допомогою WITH (NOLOCK).
Додавання WITH (NOLOCK) повідомляє SQL Server, що наша команда SELECT не обов'язково враховує стан транзакційного блокування поточної таблиці, тому продуктивність значно покращиться, а феномен блокування системи баз даних значно зменшиться (включно з мертвим блокуванням).

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

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

Якщо вам не потрібно враховувати транзакції, WITH (NOLOCK) може бути корисним джерелом.

Примітка 1: З ( < table_hint > )
Визначає сканування таблиці, один або кілька індексів, які використовуються оптимізатором запитів,
Або оптимізатор запитів, щоб використати цю таблицю даних і застосувати режим блокування для цього оператора.

Примітка 2: WITH (NOLOCK) еквівалентний READ UNCOMMITTED





Попередній:Затримка між головним і підлеглим базою даних призводить до неточного розв'язання запитів
Наступний:Вирішено проблему, що Fiddler не міг сканувати локальні локальні запити мережі 127.0.0.1
Опубліковано 2020-4-5 14:21:36 |
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com