#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 /…