Относительно блокировки таблицы при последовательном запуске хранимой процедуры

#sql-server

#sql-сервер

Вопрос:

У меня есть 15 хранимых процедур, которые содержат

 Insert into table1
select (some functions like splitstring, date calculation) 
from table2 d, table3 r, table2 d1, table3 r1)

Update table2
set date = calcualteddate
  

15 хранимых процедур, использующих одни и те же таблицы (table2, table3 и их дочерняя версия, такая как self join)

Во время выполнения всех этих хранимых процедур table2 блокируется, поэтому мы не можем выполнять какие-либо процессы в приложении из-за этого

SQL Server -> есть ли какие-либо подсказки, чтобы избежать этой ситуации?

Комментарии:

1. Таблица почти наверняка не блокируется — движок достаточно умен, чтобы блокировать только затронутые строки. Первое, что нужно сделать в подобной ситуации, это просмотреть индексы в вашей таблице, чтобы убедиться, что ни один из операторов не должен сканировать намного больше строк, чем необходимо — чем дольше выполняются операторы, тем больше возможностей для конфликтов блокировки. Если все в порядке, а остающаяся проблема заключается в том, что читатели не могут получить доступ к таблице из-за ее непрерывного обновления, может помочь изоляция моментальных снимков .

2. Я столкнулся с подобной проблемой несколько лет назад. В моем случае в table2 было небольшое количество данных (<10 КБ), и следующие 2 вещи помогли нам решить проблему: 1. создайте индекс по дате. 2. используйте блокировку строки в запросе.

3. @jereon , в этом случае обновление не займет слишком много времени, только оператор select с некоторыми функциями занял больше времени. В случае ИНДЕКСИРОВАНИЯ все поля имеют индекс. но в запросе выбора они используют функции UPPER, подобные функциям с объединением all

4. @rahul как использовать запрос блокировки строк в mssql. можете ли вы, пожалуйста, предоставить мне ссылку

5. вы можете проверить: blog.sqlauthority.com/2018/07/26 /…