Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 with (nolock) - преимущества и недостатки  [new]
Michail A.
Member

Откуда:
Сообщений: 96
Добрый день, уважаемые коллеги!

Собственно вопрос, в каких случаях в запросах оправданно использование конструкции with (nolock), а когда это может "выйти боком"?
25 фев 19, 23:13    [21819235]     Ответить | Цитировать Сообщить модератору
 Re: with (nolock) - преимущества и недостатки  [new]
Michail A.
Member

Откуда:
Сообщений: 96
Интересует возможное наличие последствий помимо эффектов грязного чтения.
25 фев 19, 23:30    [21819241]     Ответить | Цитировать Сообщить модератору
 Re: with (nolock) - преимущества и недостатки  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1367
Michail A.,

"оправданно" - это слишком громкое слово для грязного чтения.

В случаях когда религия не позволяет применять оптимистическое управление параллелизмом, а читатели блокируют писателей и уж очень хочется как то минимизировать издержки на такие блокировки. При этом есть оговорка: что допустимо что читатель может получить не согласованные данные, и бизнес логика учитывает такой факт.

Но это не отменяет того факта что такой подход "оправдан".
25 фев 19, 23:34    [21819245]     Ответить | Цитировать Сообщить модератору
 Re: with (nolock) - преимущества и недостатки  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1367
Michail A.
Интересует возможное наличие последствий помимо эффектов грязного чтения.


так там полный букет всех возможных эффектов параллелизма:

грязные чтения, повторяющиеся чтения, фантомы.
Вам сюда:https://docs.microsoft.com/ru-ru/sql/connect/jdbc/understanding-isolation-levels?view=sql-server-2017
25 фев 19, 23:37    [21819249]     Ответить | Цитировать Сообщить модератору
 Re: with (nolock) - преимущества и недостатки  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
Michail A.
Собственно вопрос, в каких случаях в запросах оправданно использование конструкции with (nolock), а когда это может "выйти боком"?
Оправданно, когда неважна корректность получаемых данных.
Например, если тут один раз на миллиард чтений продублируется какой то пост, или, наоборот, не покажется, то это для сайта неважно.
То есть оправданно применять для всяких обобщённых, несохраяемых, справочных, списков.
26 фев 19, 02:01    [21819271]     Ответить | Цитировать Сообщить модератору
 Re: with (nolock) - преимущества и недостатки  [new]
Michail A.
Member

Откуда:
Сообщений: 96
Спасибо!

Меня также интересует следующий момент, правильно ли я понимаю, что запрос с with (nolock) на определенную таблицу блокирует изменение/удаление таблицы и ее индексов?
26 фев 19, 07:22    [21819297]     Ответить | Цитировать Сообщить модератору
 Re: with (nolock) - преимущества и недостатки  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Michail A.,

Да, накладывает sch-s.
26 фев 19, 07:32    [21819299]     Ответить | Цитировать Сообщить модератору
 Re: with (nolock) - преимущества и недостатки  [new]
invm
Member

Откуда: Москва
Сообщений: 9348
Плюс ко всем перечисленным прелестям, можно еще и получить ошибку "Could not continue scan with NOLOCK due to SQL Server data movement".
26 фев 19, 09:06    [21819334]     Ответить | Цитировать Сообщить модератору
 Re: with (nolock) - преимущества и недостатки  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3708
invm
Плюс ко всем перечисленным прелестям, можно еще и получить ошибку "Could not continue scan with NOLOCK due to SQL Server data movement".


И еще плюс - это deprecated feature, не стоит привыкать к вредному

https://docs.microsoft.com/en-us/sql/database-engine/deprecated-database-engine-features-in-sql-server-2016?view=sql-server-2017
26 фев 19, 11:22    [21819479]     Ответить | Цитировать Сообщить модератору
 Re: with (nolock) - преимущества и недостатки  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Ролг Хупин
invm
Плюс ко всем перечисленным прелестям, можно еще и получить ошибку "Could not continue scan with NOLOCK due to SQL Server data movement".


И еще плюс - это deprecated feature, не стоит привыкать к вредному

https://docs.microsoft.com/en-us/sql/database-engine/deprecated-database-engine-features-in-sql-server-2016?view=sql-server-2017

стоит читать конкретно в каких случаях.
26 фев 19, 11:27    [21819488]     Ответить | Цитировать Сообщить модератору
 Re: with (nolock) - преимущества и недостатки  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
+такая штука
https://blogs.msdn.microsoft.com/sqlserverstorageengine/2006/11/08/when-can-allocation-order-scans-be-used/

Из практики существует возможность при хинте NOLOCK получить совсем другой(не оптимальный) план выполнения.
26 фев 19, 11:50    [21819521]     Ответить | Цитировать Сообщить модератору
 Re: with (nolock) - преимущества и недостатки  [new]
Alexander Us
Member

Откуда:
Сообщений: 1130
Michail A.,

скажем, такой сценарий:

Вам срочно надо сделать запрос к боевой базе для сбора какой то статистики
Вас устраивает погрешность "измерения"

НО:
если Вы своим запросом затормозите работу приложений, более чем XX секунд,
это приведёт к немедленным жалобам на горячую линию

В таких случаях я использую

предварительную выборку части данных в tempdb (если это имеет смысл)
with (nolock)
option(maxdop 1)

хоть, возможно, и буду подвергнут критике.
26 фев 19, 12:18    [21819572]     Ответить | Цитировать Сообщить модератору
 Re: with (nolock) - преимущества и недостатки  [new]
L_argo
Member

Откуда:
Сообщений: 1213
Вот 1С во всю юзает ноулок.
Никто не умер.
26 фев 19, 13:10    [21819632]     Ответить | Цитировать Сообщить модератору
 Re: with (nolock) - преимущества и недостатки  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
L_argo
Вот 1С во всю юзает ноулок.
Никто не умер.

эталонная вещь
26 фев 19, 13:15    [21819637]     Ответить | Цитировать Сообщить модератору
 Re: with (nolock) - преимущества и недостатки  [new]
vitkhv
Member

Откуда: Москва
Сообщений: 940
L_argo
Вот 1С во всю юзает ноулок.
Никто не умер.


И самое главное никаких "Could not continue scan with NOLOCK due to SQL Server data movement" никогда не было.
26 фев 19, 15:43    [21819870]     Ответить | Цитировать Сообщить модератору
 Re: with (nolock) - преимущества и недостатки  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3708
L_argo
Вот 1С во всю юзает ноулок.
Никто не умер.


и не сел
26 фев 19, 15:46    [21819874]     Ответить | Цитировать Сообщить модератору
 Re: with (nolock) - преимущества и недостатки  [new]
архивариус
Member

Откуда:
Сообщений: 150
Michail A.
Добрый день, уважаемые коллеги!

Собственно вопрос, в каких случаях в запросах оправданно использование конструкции with (nolock), а когда это может "выйти боком"?

Re: WITH(NOLOCK) - без него значительно быстрее. Странно.
26 фев 19, 18:08    [21820011]     Ответить | Цитировать Сообщить модератору
 Re: with (nolock) - преимущества и недостатки  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4729
vitkhv
L_argo
Вот 1С во всю юзает ноулок.
Никто не умер.


И самое главное никаких "Could not continue scan with NOLOCK due to SQL Server data movement" никогда не было.


Это старейшая ошибка существовавшая ещё во времена 2000. Возникает при чтении NTEXT, NVARCHAR(MAX) и других блобов с NOLOCK
26 фев 19, 18:18    [21820014]     Ответить | Цитировать Сообщить модератору
 Re: with (nolock) - преимущества и недостатки  [new]
vitkhv
Member

Откуда: Москва
Сообщений: 940
a_voronin
[
Это старейшая ошибка существовавшая ещё во времена 2000. Возникает при чтении NTEXT, NVARCHAR(MAX) и других блобов с NOLOCK


В то и дело, что NTEXT использовался для текстовых полей неограниченной длинны в версиях 8.0 и 8.1, умевших еще работать с 2000 MSSQL. NVARCHAR(MAX) повсеместно используется с 8.2 и соответственно в 8.3 в новых релизах для текстовых полей неограниченной длинны. Но с ошибкой такой я никогда не сталкивался, хотя у 1С в отчетах все c WTIH(NOLOCK).
1 мар 19, 14:50    [21822779]     Ответить | Цитировать Сообщить модератору
 Re: with (nolock) - преимущества и недостатки  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4729
vitkhv
a_voronin
[
Это старейшая ошибка существовавшая ещё во времена 2000. Возникает при чтении NTEXT, NVARCHAR(MAX) и других блобов с NOLOCK


В то и дело, что NTEXT использовался для текстовых полей неограниченной длинны в версиях 8.0 и 8.1, умевших еще работать с 2000 MSSQL. NVARCHAR(MAX) повсеместно используется с 8.2 и соответственно в 8.3 в новых релизах для текстовых полей неограниченной длинны. Но с ошибкой такой я никогда не сталкивался, хотя у 1С в отчетах все c WTIH(NOLOCK).



Репо такое
1) В первом окне пускаете в цикле запрос, который вставляет и удаляет часть данных из таблицы c NVARCHAR(MAX) , чем больше блоб тем быстрее повторите или ещё лучше мердж
2) Во втором окне пускаете чтение этого поля (допустим SELECT-INSERT во временную таблицу или LIKE по этому блобу) с NOLOCK

При параллельной работе таких двух сессий получите ошибку
4 мар 19, 20:10    [21824804]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить