Наше приложение выполняет эти два запроса:
select A.* from LETTUREAPERTE A
where IDAZIENDAOPERATORE=3
и
select A.* from LETTUREAPERTE A
where IDAZIENDAOPERATORE=2
по идентификатору компании, которую рассматривает пользователь. Ну, пока второй запрос выполняется корректно, первый блокируется и никогда не выполняется. В LETTUREAPERTE
таблицах меньше 400 записей, в некоторых IDAZIENDAOPERATORE
по 2, в некоторых по 3.
Я не знаю, почему это происходит и почему первый запрос блокируется... Я получаю эту ошибку в конце. Я получаю сообщение об ошибке, говорящее о том, что процесс был выбран в качестве жертвы взаимоблокировки.
Транзакция (идентификатор процесса 62) заблокирована на ресурсах блокировки другим процессом и выбрана в качестве жертвы взаимоблокировки. Повторите транзакцию.
Я даже выполнил несколько запросов, чтобы определить, есть ли какие-либо блокировки обновления для некоторых записей этой таблицы, но их нет. Так и должно быть, потому что за весь проект мы ни разу не использовали UPDLOCK в запросах...
with option (recompile)
, чтобы узнать, получится ли у вас лучший план выполнения. - person Gordon Linoff   schedule 26.01.2017with option (recompile)
? Что это за заявление? - person SagittariusA   schedule 26.01.2017select A.* from LETTUREAPERTE A where IDAZIENDAOPERATORE=2 with option(recompile)
.. но я не думаю, что это может повлиять на таблицу с 400 записями. Можете ли вы опубликовать график взаимоблокировки - person TheGameiswar   schedule 26.01.2017UPDATE STATISTICS [dbo].[TABLE] WITH FULLSCAN
для каждой таблицы, участвующей в представлении... как вы понимаете, происходит массовое чтение? - person SagittariusA   schedule 26.01.2017