Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 11079|Отговор: 1

[Източник] MSSQL С (NOLOCK) мръсно четене

[Копирай линк]
Публикувано на 2020-4-3 10:06:04 | | |
Минуси:

1. Ще доведе до мръсно четене

2. Приложимо само за select заявки

Плюсове:

1. Някои файлове посочват, че ефективността на SQL заявките с WITH (NOLOCK) може да се увеличи с 33%.

2. Може да се използва за вътрешни съединителни оператори

Мръсно четене: Потребител прави промяна в ресурс, друг потребител случайно чете модифицирания запис, след което първият потребител се отказва от промяната, а данните се връщат към предишната, тези два различни резултата са мръсно четене.

Подробности:

За да се подобри производителността на SQL заявките, общо взето, първото съображение е създаването на индекс. Всъщност, освен създаването на индекси, когато поставяме SQL команди, добавянето на секция WITH (NOLOCK) към синтаксиса може да подобри явлението на LOCK-ване на набори от данни в среда с голям брой онлайн заявки, като по този начин подобрява производителността на заявките.

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

Например:

Освен простия SELECT, можеш да използваш и SELECT синтаксиса с JOIN. Но командите DELETE, INSERT, UPDATE и други, които изискват транзакции, не са добри...


Някои файлове казват, че ефективността на 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