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

Откуда:
Сообщений: 191
Всем привет.
Кто нибуть может доходчиво объяснить как работает WITH (NOLOCK)
Всетаки - как много он может лочить данные, потому что у меня эта конструкция не используется и многие клиенты вылитают на таймаутах при чтении из таблицы каторая читается без этой инструкции.
А???
11 окт 03, 23:50    [373307]     Ответить | Цитировать Сообщить модератору
 Re: как работает WITH (NOLOCK)  [new]
Glory
Member

Откуда:
Сообщений: 104760
Да вроде бы в 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.
12 окт 03, 00:30    [373320]     Ответить | Цитировать Сообщить модератору
 Re: как работает WITH (NOLOCK)  [new]
snake
Member

Откуда: Russia, Penza
Сообщений: 2290
http://www.rsdn.ru/mag/0303/Locks.XML
но почему то, не опубликовали.
12 окт 03, 09:08    [373366]     Ответить | Цитировать Сообщить модератору
 Re: как работает WITH (NOLOCK)  [new]
Merle
Guest
Выложат на сайт попозже, спустя месяца два-три после выхода журнала с этой статьей...
Но про nolock там почти ничего нету, впрочем Glory все уже рассказал.
13 окт 03, 12:11    [373950]     Ответить | Цитировать Сообщить модератору
 Re: как работает WITH (NOLOCK)  [new]
snake
Member

Откуда: Russia, Penza
Сообщений: 2290
То есть как это нет?
А Вы читали?

ps.
NOLOCK
Equivalent to READUNCOMMITTED.
ms-help://MS.MSDNQTR.2003JUL.1033/tsqlref/ts_fa-fz_4ox9.htm
13 окт 03, 12:20    [373974]     Ответить | Цитировать Сообщить модератору
 Re: как работает WITH (NOLOCK)  [new]
Merle
Guest
Да, читал.

Нет в том виде в котором нужно автору вопроса, да и вообще про READ UNCOMMITTED мало и статья очень... специфическая. ;)
Но не плохая.. ;)
13 окт 03, 13:11    [374070]     Ответить | Цитировать Сообщить модератору
 Re: как работает WITH (NOLOCK)  [new]
snake
Member

Откуда: Russia, Penza
Сообщений: 2290
в том виде в котором нужно автору вопроса
про READ UNCOMMITTED мало и статья очень... специфическая. ;)
... первоисточники там указаны.
1. MS SQL Server 2000 для профессионалов, Мамаев 2001 г.
2. Inside Microsoft SQL Server 2000 / Kalen Delaney.
13 окт 03, 14:12    [374167]     Ответить | Цитировать Сообщить модератору
 Re: как работает WITH (NOLOCK)  [new]
Merle
Guest
Ну первоисточники - это вовсе не статья... Да и Мамаев что-то у меня доверия не вызывает.
Что же касается самой статьи, то там неплохо описан механизм блокировок с учетом intent lock'ов и прочей лабуды, но на мой взгляд совершенно лишне было пытаться объяснить стандартные уровни изоляции посредством примеров на C++...

Вообщем чего зря описывать, пойду посмотрю, может статью уже можно выложить, тогда дам ссылку, как только в онлайне появится...
13 окт 03, 14:55    [374262]     Ответить | Цитировать Сообщить модератору
 Re: как работает WITH (NOLOCK)  [new]
snake
Member

Откуда: Russia, Penza
Сообщений: 2290
Так C++ там только вначале!
То есть в разделе Введение.
Далее речь только об MS SQL.
ps. Ладно, ждем опубликования.
13 окт 03, 15:13    [374310]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: как работает WITH (NOLOCK)  [new]
sash04ek
Guest
У меня ситуация обратная.
Есть запрос:

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), то тормоза проходят... В чем дело?
31 мар 09, 09:50    [6996461]     Ответить | Цитировать Сообщить модератору
 Re: как работает WITH (NOLOCK)  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4248
Вопрос не по теме, но просто интересно... А нахрена в наборе NOT IN сортировка???
31 мар 09, 09:55    [6996491]     Ответить | Цитировать Сообщить модератору
 Re: как работает WITH (NOLOCK)  [new]
вот
Guest
SQL2008
Вопрос не по теме, но просто интересно... А нахрена в наборе NOT IN сортировка???

потому что top 20
31 мар 09, 09:56    [6996494]     Ответить | Цитировать Сообщить модератору
 Re: как работает WITH (NOLOCK)  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4248
Поспешил... Не увидел TOP
31 мар 09, 09:56    [6996495]     Ответить | Цитировать Сообщить модератору
 Re: как работает WITH (NOLOCK)  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4248
Плохо, что отсутствие конструкции типа LIMIT как в MySQL заставляет писать такие скрипты.
31 мар 09, 09:58    [6996510]     Ответить | Цитировать Сообщить модератору
 Re: как работает WITH (NOLOCK)  [new]
вот
Guest
SQL2008
Плохо, что отсутствие конструкции типа LIMIT как в MySQL заставляет писать такие скрипты.

вполне достаточно row_number()
31 мар 09, 10:00    [6996518]     Ответить | Цитировать Сообщить модератору
 Re: как работает WITH (NOLOCK)  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4248
вот
SQL2008
Плохо, что отсутствие конструкции типа LIMIT как в MySQL заставляет писать такие скрипты.

вполне достаточно row_number()

Конечно.
Но посмотрите на конструкцию с ROW_NUMBER() и с LIMIT! Что проще и нагляднее?

У Майкрософтов, как обычно, свой путь...
31 мар 09, 10:05    [6996564]     Ответить | Цитировать Сообщить модератору
 Re: как работает WITH (NOLOCK)  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
SQL2008
вот
SQL2008
Плохо, что отсутствие конструкции типа LIMIT как в MySQL заставляет писать такие скрипты.

вполне достаточно row_number()

Конечно.
Но посмотрите на конструкцию с ROW_NUMBER() и с LIMIT! Что проще и нагляднее?

У Майкрософтов, как обычно, свой путь...
Какое отношение Microsoft имеет к ROW_NUMBER()?
31 мар 09, 10:08    [6996582]     Ответить | Цитировать Сообщить модератору
 Re: как работает WITH (NOLOCK)  [new]
вот
Guest
SQL2008
вот
SQL2008
Плохо, что отсутствие конструкции типа LIMIT как в MySQL заставляет писать такие скрипты.

вполне достаточно row_number()

Конечно.
Но посмотрите на конструкцию с ROW_NUMBER() и с LIMIT! Что проще и нагляднее?

У Майкрософтов, как обычно, свой путь...

во-первых: +1 к iap
во-вторых: а с помощью limit можно выбрать четные/нечетные записи, или каждую 5, 10, n-ую? А с нумерацией в разрезе групп?
31 мар 09, 10:36    [6996867]     Ответить | Цитировать Сообщить модератору
 Re: как работает WITH (NOLOCK)  [new]
mccc
Member [заблокирован]

Откуда: Казань
Сообщений: 7650
есть view vw#bs_doc

...
from t#basedoc bd
join t#stepdoc sd on bd.f$nrec=sd.f$cbasedoc

и запрос с Locking Hints

select
...
from vw#bs_doc bd with (nolock)

если переписать этот запрос без view (используя from -- join таблиц из view)
как надо/нужно прописать "with (nolock)"
7 авг 09, 16:08    [7511891]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: как работает WITH (NOLOCK)  [new]
funny
Member

Откуда:
Сообщений: 147
вот
SQL2008
пропущено...

Конечно.
Но посмотрите на конструкцию с ROW_NUMBER() и с LIMIT! Что проще и нагляднее?

У Майкрософтов, как обычно, свой путь...

во-первых: +1 к iap
во-вторых: а с помощью limit можно выбрать четные/нечетные записи, или каждую 5, 10, n-ую? А с нумерацией в разрезе групп?


ROW_NUMBER() и TOP это 2 большие разницы, если я не ошибаюсь.

TOP это TOP, а ROW_NUMBER() вырывает просто кусок и потом этот кусок отсортировывает ... вроде как
5 окт 16, 08:20    [19744521]     Ответить | Цитировать Сообщить модератору
 Re: как работает WITH (NOLOCK)  [new]
TaPaK
Member

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

автор
ROW_NUMBER() вырывает просто кусок и потом этот кусок отсортировывает ... вроде как

окна... кадры... нет! вырывает кусок! и да... 7 лет
5 окт 16, 09:23    [19744680]     Ответить | Цитировать Сообщить модератору
 Re: как работает WITH (NOLOCK)  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
funny,

Чета вы батенька рано пить начали, сегодня вроде еще не пятница.
5 окт 16, 10:49    [19745025]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить