powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Действие Rowlock
10 сообщений из 10, страница 1 из 1
Действие Rowlock
    #32075783
AlexQC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите плиз, я правильно понял?
Делается UPDATE MyTable WITH(ROWLOCK) - в транзакции, в другой сессии тоже делается UPDATE WITH(ROWLOCK) но с иным условием. Так вот, если условия у апдейтов не пересекаются, должны оба апдейта выполниться, один не должен ждать завершения другого? Потому что у меня все равно ждут.
...
Рейтинг: 0 / 0
Действие Rowlock
    #32075806
Фотография Shura_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скиньте сюда текст всего запроса, вам помогут.
Вообще МS не советует использовать хинты в запросах - оптимизатор сам разберется как сделать правильно, а вам только лишний повод допустить ошибку.
...
Рейтинг: 0 / 0
Действие Rowlock
    #32075814
Фотография Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не стоит забывать, что при UPDATE обновляются не только данные, но и индексы и так далее. Так что несмотря на то, что на уровне данных блокирована только одна запись, то индексы могу быть заблокированы полностью

-- Слон
...
Рейтинг: 0 / 0
Действие Rowlock
    #32075820
AlexQC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно, я это спрашивал в Организация блокировок , только то не моя ветка. \r
Повторюсь.\r
Имею ХП\r
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
\r
CREATE PROCEDURE tovlock AS \r
\r
update base_tovlock with (rowlock) \r
set spid=@@spid \r
where tov_id in (select tov_id from #tovlock) \r
\r
insert into base_tovlock with(rowlock) \r
(tov_id,spid) select tov_id,@@spid \r
from #tovlock where #tovlock.tov_id not in (select tov_id from base_tovlock) \r
\r
delete from #tovlock \r
\r
\r
структура таблиц \r
base_tovlock (tov_id char(9) NOT NULL, spid int NOT NULL) \r
#tovlock (tov_id char(9) NOT NULL) \r
\r
\r
Предполагалось следующее: создается список интересующих товаров в #tovlock, вызывается ХП которая блокирует те tov_id и только те tov_id , которые есть в #tovlock. Соответственно если интересуемые товары уже заблокированы, процедура подождет их "освобождения". Однако в реальности процедура застревает когда заблокированы ЛЮБЫЕ tov_id, а не только те что в списке. Т.е. впечатление, что невзирая на rowlock блокируется вся таблица.
...
Рейтинг: 0 / 0
Действие Rowlock
    #32075829
Фотография Белов Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>AlexQC
Как так не должны ждать ?
Как раз и должны - сервер же захватывает, блокирует строк или строки над которым ты проводишь обновление. Соответственно, воторой апдейт и ждет пока первый запрос освободит ресурс.
Да и тем более Сиквел сам выберет какой тип блокировки ему использовать на данный момент. Так что лучше подсказки для блокировок оставь для селекта.
Да кстати, не "всякая" процедура бедт ждать пока ты освободишь ресур, а прост напросто рухнет по тайм-ауту.
...
Рейтинг: 0 / 0
Действие Rowlock
    #32075926
AlexQC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Слон
Индексов у таблицы нет.
И вообще, если все равно блокируется вся таблица, какой смысл в rowlock? Зачем его тогда сделали?

to Белов Владимир
Те которые апдейчу - да. Мне и надо чтобы второй апдейт ждал первого. Но только если их строки пересекаются! А блокируются и те строки, которые под апдейт не попадают (вернее, похоже вся таблица блокируется)!

Таймаут - это уже другая вещь, прямого отношения к вопросу не имеющая.
...
Рейтинг: 0 / 0
Действие Rowlock
    #32075938
nandji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по коду, ждут у тебя не апдейты, а селекты.
...
Рейтинг: 0 / 0
Действие Rowlock
    #32075969
AlexQC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ты имеешь в виду (select tov_id from base_tovlock)? я и с select tov_id from base_tovlock(nolock) тоже пробовал, результат такой же. Да и если по профайлеру смотреть, оно на апдейте останавливается (или профайлер чего-то недопоказывает). А (select tov_id from #tovlock) на сколько я понимаю тормозится не должен.
...
Рейтинг: 0 / 0
Действие Rowlock
    #32076413
Фотография Дед Маздай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите здесь: http://www.sql.ru/articles/mssql/TSQL.zip
Слайд называется "Индексы и блокировки".
...
Рейтинг: 0 / 0
Действие Rowlock
    #32076642
Merle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В том то и дело, что у тебя индексов нет. ROWLOCK только при наличии индексов работает да и то не всегда...
Все равно может быть эскалация блокировки если запрос сложный, но это не твой случай. Построй грамотно индексы и выкини все хинты из запросов, оптимизатор сам разберется, и скорее всего в твоем случае наложит rowlock.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Действие Rowlock
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]