Я использую процесс, который непрерывно вставляет данные в 2 таблицы с блокировкой строки.В то же время я хочу использовать несколько запросов к этим таблицам.Как я уже сказал, вставки выполняются с помощью (rowlock), и я использую для запросов уровень изоляции read uncommitted и nolock.
Когда я использую запросы к одной таблице, они работают отлично, но когда я пытаюсь присоединитьсяВ двух таблицах я получаю эту ошибку:
Транзакция (идентификатор процесса 88) заблокирована для ресурсов блокировки другого процесса и выбрана в качестве жертвы тупика.Перезапустите транзакцию.
Тем временем, если я использую процедуру sp_lock, я обнаружил, что блокировка клавиш становится блокировкой табуляции при выполнении моих запросов.
Кто-нибудь знает, существует ли особая связь между (nolock) и join?И если есть, как я могу избежать этого.
ОБНОВЛЕНИЕ:
Insert into tbl1 with (rowlock)
(
col1,
col2,
col3
)
select * from #tbl_temp
(это бесконечный цикл, и данные из #tbl_temp всегда меняются.На самом деле это более сложный процесс, но это идея.)
Insert into tbl2 with (rowlock)
(
col3,
col4,
col5
)
select * from #tbl_temp2
В то же время я выполняю
set transaction isolation level read uncomitted
select col1,col2,col3
from tbl1 with (nolock) -- works fine
select col1,col2,a.col3
from tbl1 with (nolock) join tbl2 with (nolock) on (tbl1.col3 = tbl2.col3)
- тупик