Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Согласование SELECT и UPDATE / 8 сообщений из 8, страница 1 из 1
26.07.2021, 11:17
    #40086158
Alex_Va
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласование SELECT и UPDATE
Добрый день,

Есть таблица, к которой обращаются два запроса:
Первый запрос обновляет данные в таблице, используя DELETE, INSERT и UPDATE, оформлен процедурой, которую периодически запускает джоб.
Второй запрос - только SELECT

Нужно ли в коде прописывать какие-либо блокировки (если да, то какие?), чтобы выполнялись два условия:
1. Пока полностью не выполнится обновление, запрос на SELECT ожидает и не выполняется

2. Также и для обновляющего запроса - он не начинает выполняться, пока не завершится SELECT
...
Рейтинг: 0 / 0
26.07.2021, 12:00
    #40086174
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласование SELECT и UPDATE
Ну, если очень надо:
1. Делаешь две процедуры:
1) "Первый запрос обновляет данные в таблице, используя DELETE, INSERT и UPDATE"
2) "Второй запрос - только SELECT"
2. Изучаешь sp_getapplock
3. Вызываешь sp_getapplock в начале каждой из процедур.
...
Рейтинг: 0 / 0
26.07.2021, 16:30
    #40086275
НиколайСН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласование SELECT и UPDATE
with (nolock) в SELECTe не вариант?
Выборка происходит без блокировки таблицы, в которую происходит DELETE, INSERT и UPDATE твоим джобом
...
Рейтинг: 0 / 0
26.07.2021, 17:11
    #40086291
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласование SELECT и UPDATE
Alex_Va,

Почти наверняка, RCSI то, что вам нужно
...
Рейтинг: 0 / 0
26.07.2021, 17:13
    #40086293
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласование SELECT и UPDATE
НиколайСНwith (nolock) в SELECTe не вариант?Совсем не вариант. ТС ХОЧЕТ блокировку.

Я думаю, что проще всего обернуть первый запрос в транзакцию и позволить серверу решить вопрос с блокировками.
...
Рейтинг: 0 / 0
26.07.2021, 17:27
    #40086297
Alex_Va
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласование SELECT и UPDATE
SERG1257
НиколайСНwith (nolock) в SELECTe не вариант?
Совсем не вариант. ТС ХОЧЕТ блокировку.

Я думаю, что проще всего обернуть первый запрос в транзакцию и позволить серверу решить вопрос с блокировками.

NOLOCK не подходит

сейчас использую в процедуре обновления

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
begin tran

alter table dbo.[tTableName]  set (lock_escalation = auto);

DELETE ...
INSERT ... 
UPDATE ...


commit tran



иногда это вызывает взаимоблокировку
...
Рейтинг: 0 / 0
26.07.2021, 18:11
    #40086315
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласование SELECT и UPDATE
Alex_Va,

Как достичь желаемого, чтобы не мешать другим читателям/писателям написано тут - 22351110

Если такой задачи не стоит, то в процедуре
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin tran

declare @dummy int;
select top (0) @dummy = 0 from dbo.[tTableName] with (tablockx);

DELETE ...
INSERT ... 
UPDATE ...


commit tran


В выборке
Код: sql
1.
select ... from dbo.[tTableName] with (tablock) ...
...
Рейтинг: 0 / 0
26.07.2021, 20:04
    #40086334
Alex_Va
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласование SELECT и UPDATE
Спасибо всем за ответы.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Согласование SELECT и UPDATE / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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