как работает WITH (NOLOCK)
alex_24
Дата: 11.10.2003 23:50:51
Всем привет.
Кто нибуть может доходчиво объяснить как работает WITH (NOLOCK)
Всетаки - как много он может лочить данные, потому что у меня эта конструкция не используется и многие клиенты вылитают на таймаутах при чтении из таблицы каторая читается без этой инструкции.
А???
Glory
Дата: 12.10.2003 00:30:20
Да вроде бы в BOL все написано.
NOLOCK - Do not issue shared locks and do not honor exclusive locks. When this option is in effect, it is possible to read an uncommitted transaction or a set of pages that are rolled back in the middle of a read. Dirty reads are possible. Only applies to the SELECT statement.
К тому же в той же главе(Locking hints) приведен пример как проверить какие блокировки накладываются именно при NOLOCK. И сказано, что максимум, что можно ожидать от NOLOCK - это блокировки типа schema stability (Sch-S), про которую в свою очередь сказано
Schema stability (Sch-S) locks are used when compiling queries. Schema stability (Sch-S) locks do not block any transactional locks, including exclusive (X) locks. Therefore, other transactions can continue to run while a query is being compiled, including transactions with exclusive (X) locks on a table. However, DDL operations cannot be performed on the table.
snake
Дата: 12.10.2003 09:08:01
Merle
Дата: 13.10.2003 12:11:19
Выложат на сайт попозже, спустя месяца два-три после выхода журнала с этой статьей...
Но про nolock там почти ничего нету, впрочем Glory все уже рассказал.
snake
Дата: 13.10.2003 12:20:11
То есть как это нет?
А Вы читали?
ps.
NOLOCK
Equivalent to READUNCOMMITTED.
ms-help://MS.MSDNQTR.2003JUL.1033/tsqlref/ts_fa-fz_4ox9.htm
Merle
Дата: 13.10.2003 13:11:48
Да, читал.
Нет в том виде в котором нужно автору вопроса, да и вообще про READ UNCOMMITTED мало и статья очень... специфическая. ;)
Но не плохая.. ;)
snake
Дата: 13.10.2003 14:12:12
в том виде в котором нужно автору вопроса
про READ UNCOMMITTED мало и статья очень... специфическая. ;)
... первоисточники там указаны.
1. MS SQL Server 2000 для профессионалов, Мамаев 2001 г.
2.
Inside Microsoft SQL Server 2000 / Kalen Delaney.
Merle
Дата: 13.10.2003 14:55:59
Ну первоисточники - это вовсе не статья... Да и Мамаев что-то у меня доверия не вызывает.
Что же касается самой статьи, то там неплохо описан механизм блокировок с учетом intent lock'ов и прочей лабуды, но на мой взгляд совершенно лишне было пытаться объяснить стандартные уровни изоляции посредством примеров на C++...
Вообщем чего зря описывать, пойду посмотрю, может статью уже можно выложить, тогда дам ссылку, как только в онлайне появится...
snake
Дата: 13.10.2003 15:13:52
Так C++ там только вначале!
То есть в разделе Введение.
Далее речь только об MS SQL.
ps. Ладно, ждем опубликования.
sash04ek
Дата: 31.03.2009 09:50:14
У меня ситуация обратная.
Есть запрос:
SELECT TOP 20 * FROM awm_messages
WITH(NOLOCK) WHERE id_acct=@id_acct AND id_folder_db=@id_folder_db AND id_msg NOT IN
(SELECT TOP 20 id_msg FROM awm_messages WITH(NOLOCK) WHERE id_acct=@id_acct AND id_folder_db=@id_folder_db ORDER BY msg_date DESC)
ORDER BY msg_date DESC
Смотрю логи приложения и периодически возникают тормоза при его выполнении, а то и вовсе:
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
После того как убираю
WITH(NOLOCK), то тормоза проходят... В чем дело?