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

Откуда:
Сообщений: 2
Помогите пожалуйста. Не понимаю, можно ли что-то сделать в этой ситуации.
Запускаю update , который изменяет изменяет запись с id , например, 100. Параллельно с update делаю select записей из непересикающегося множества этой же таблицы(например с id 500 - 700). На время выполнения обновления select блокируется и данные возобновляются только после завершения транзакции update. Я полагал, что в такой ситуации должна блокироваться только обновляемая запись, а получается, что блокируется вся таблица. Можно ли распараллелить эти два запроса, чтобы select не блокировался до завершения update?
22 ноя 16, 18:25    [19922209]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы при одновременном update & select  [new]
o-o
Guest
DonDimon
из непересикающегося множества этой же таблицы

непере...прости господи, сикающиеся?
сикают-сикают, все никак не пересикают?
таблица-то куча или как?
22 ноя 16, 18:43    [19922269]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы при одновременном update & select  [new]
RasimS
Member

Откуда: SPB
Сообщений: 954
DonDimon,
индекс по полю id сделайте
22 ноя 16, 19:08    [19922315]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы при одновременном update & select  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
DonDimon,

сервер блокирует не то, что у разработчика в воображении, а то, что требуется для точного определения строк по условию отбора.
23 ноя 16, 11:21    [19924072]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы при одновременном update & select  [new]
DonDimon
Member

Откуда:
Сообщений: 2
Спасибо большое, теперь понятно, что нужно строить индексы по полям входящим в WHERE.
23 ноя 16, 12:13    [19924436]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы при одновременном update & select  [new]
FreeBard
Member

Откуда:
Сообщений: 223
DonDimon
Спасибо большое, теперь понятно, что нужно строить индексы по полям входящим в WHERE.

Это не всегда спасает от блокировок

Как альтернативу, в некоторых сценариях, можно использовать хинт NOLOCK
23 ноя 16, 16:13    [19925873]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка таблицы при одновременном update & select  [new]
Sybex
Member

Откуда: Moscow
Сообщений: 113
FreeBard
Как альтернативу, в некоторых сценариях, можно использовать хинт NOLOCK

Не учите людей плохому! Если ТС открыл для себя, что индексы нужно строить, то его уровень квалификации явно не позволяет понять всю глубину хинтов и того, к чему может привести их использование! А проблем от бездумного применения хинтов можно поиметь очень много, в том числе и с искажением данных (грязные чтения штука опасная)!
23 ноя 16, 16:18    [19925940]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить