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

Откуда: Minsk
Сообщений: 59
Решил уточнить у знатоков MSSQL.

Если создать VIEW v_Some_Table на базе запроса с опцией оптимизатору WITH (NOLOCK)
SELECT * FROM Some_Table WITH (NOLOCK)

будет ли данная WITH (NOLOCK) действовать на последующие запросы к представлению v_Some_Table

Будет ли
SELECT * FROM v_Some_Table

блокировать таблицу Some_Table на время своего исполнения?
11 апр 12, 14:26    [12399605]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы и WITH (NOLOCK)  [new]
WarAnt
Member

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

нет
11 апр 12, 14:33    [12399678]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы и WITH (NOLOCK)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
VIEW - это всего лишь навсего запрос, хранимый на сервере.
Если второй свой запрос перепишите через подзапрос

SELECT * FROM (SELECT * FROM Some_Table WITH (NOLOCK)) as v_Some_Table

что изменится?
11 апр 12, 14:33    [12399683]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы и WITH (NOLOCK)  [new]
MSSQL_USER
Member

Откуда: Minsk
Сообщений: 59
tpg, ничего не изменится

а что изменится?
11 апр 12, 14:38    [12399735]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы и WITH (NOLOCK)  [new]
Glory
Member

Откуда:
Сообщений: 104751
BOL
Hints that are placed on views in a query may conflict with other hints that are discovered when the view is expanded to access its base tables. When this occurs, the query returns an error.
11 апр 12, 14:41    [12399762]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы и WITH (NOLOCK)  [new]
MSSQL_USER
Member

Откуда: Minsk
Сообщений: 59
Получается, что все виды, которые должны только читать из базы (без возможность обновлять записи)
ПРОСТО ВСЕГДА ДОЛЖНЫ БЫТЬ С ОПЦИЕЙ WITH (NOLOCK)?
11 апр 12, 14:43    [12399790]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы и WITH (NOLOCK)  [new]
Glory
Member

Откуда:
Сообщений: 104751
MSSQL_USER
ПРОСТО ВСЕГДА ДОЛЖНЫ БЫТЬ С ОПЦИЕЙ WITH (NOLOCK)

Почему это всегда и почему должны ?
11 апр 12, 14:45    [12399804]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы и WITH (NOLOCK)  [new]
MSSQL_USER
Member

Откуда: Minsk
Сообщений: 59
Glory, так как цель вида такая - только читать данные, чтобы длительный SELECT не блокировал другие SELECTы
11 апр 12, 15:01    [12399966]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы и WITH (NOLOCK)  [new]
Glory
Member

Откуда:
Сообщений: 104751
MSSQL_USER
Glory, так как цель вида такая - только читать данные, чтобы длительный SELECT не блокировал другие SELECTы

А почему вы считаете, что view-ы можно использовать только в SELECT запросах ?
11 апр 12, 15:06    [12400010]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы и WITH (NOLOCK)  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
MSSQL_USER
Glory, так как цель вида такая - только читать данные, чтобы длительный SELECT не блокировал другие SELECTы


BOL->Row Versioning
11 апр 12, 16:05    [12400533]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы и WITH (NOLOCK)  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3755
MSSQL_USER
Glory, так как цель вида такая - только читать данные, чтобы длительный SELECT не блокировал другие SELECTы

селекты и так не блокируют другие селекты.
а нолок читает незакомиченные данные
11 апр 12, 16:42    [12400855]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы и WITH (NOLOCK)  [new]
MSSQL_USER
Member

Откуда: Minsk
Сообщений: 59
Glory
MSSQL_USER
Glory, так как цель вида такая - только читать данные, чтобы длительный SELECT не блокировал другие SELECTы

А почему вы считаете, что view-ы можно использовать только в SELECT запросах ?


:) что-то мы вопросами все общаемся.

Уже боюсь и спросить, а где еще можно VIEW использовать как не в SELECT-запросах?
11 апр 12, 16:57    [12400953]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы и WITH (NOLOCK)  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
MSSQL_USER
Уже боюсь и спросить, а где еще можно VIEW использовать как не в SELECT-запросах?

в INSERT/UPDATE/DELETE/MERGE !?
11 апр 12, 17:03    [12400998]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы и WITH (NOLOCK)  [new]
MSSQL_USER
Member

Откуда: Minsk
Сообщений: 59
Ivan Durak
селекты и так не блокируют другие селекты.
а нолок читает незакомиченные данные

По трассе посмотрел в профайлере.
Есть WEB-приложение, которое все время работает от имени одного пользователя (вижу по трассе)
Суть его - строить всевозможные отчеты (только чтение исходной базы)
Наступает момент, когда приходит длительный SELECT (пусть 2 минуты), а в это время приходит несколько других запросов от этого же пользователя - все они ждут исполнения длительного запроса иногда выдавая timeout.
Хочу, чтобы не ждали, а работали параллельно - NOLOCK помогает, но не все пользователи его применят, - они могут работать сами по себе с базой напрямую.
Может есть другое решение проблемы - буду рад совету.
11 апр 12, 17:11    [12401056]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы и WITH (NOLOCK)  [new]
офигеть
Guest
и все чтецы типа ждут этого чтеца???
Ivan Durak
MSSQL_USER
Glory, так как цель вида такая - только читать данные, чтобы длительный SELECT не блокировал другие SELECTы

селекты и так не блокируют другие селекты.
а нолок читает незакомиченные данные

!!!
11 апр 12, 17:14    [12401069]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы и WITH (NOLOCK)  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
блокировать таблицу Some_Table на время своего исполнения?
не будет
11 апр 12, 17:39    [12401218]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы и WITH (NOLOCK)  [new]
для тех кто не
Guest
to Александр52,

типа это перевод первого же ответа в теме?
WarAnt
MSSQL_USER,

нет
11 апр 12, 17:43    [12401253]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы и WITH (NOLOCK)  [new]
MSSQL_USER
Member

Откуда: Minsk
Сообщений: 59
To Ofigetь Да, SELECT блокирует табличку на время своего исполнения.

Вот маленькая ссылка по смежной теме Блокировки на SELECT

Может это можно как-то глобально разрулить на уровне БД?
11 апр 12, 17:56    [12401338]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы и WITH (NOLOCK)  [new]
офигеть
Guest
MSSQL_USER,
чукча не читатель?
Гавриленко Сергей Алексеевич
Oblom
При мониторинге блокировок увидел, что запрос №2 блокируется запросом №1
В списке ресурсов, на которые сервером накладываются блокировки, ресурса "запрос" нет.

Oblom
блокируется ... Lock Mode S.
S-блокировки совместимы, вообще-то. Так что не понятно, как у вас одна заблокировала другую.


в 3-ий раз: читатели не блокируют читателей
11 апр 12, 18:00    [12401373]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить