С другой стороны, есть два других аспекта, которые могут помочь.
1) Индексы и индексы, используемые SQL. Стратегия индексирования, используемая в таблицах, будет влиять на количество строк. Если вы вносите изменения в данные с использованием уникального индекса, вы можете уменьшить вероятность взаимных блокировок.
Один алгоритм - конечно, он не будет работать во всех случаях. Использование NOLOCK является целевым, а не глобальным.
The "old" way:
UPDATE dbo.change_table
SET somecol = newval
WHERE non_unique_value = 'something'
The "new" way:
INSERT INTO #temp_table
SELECT uid FROM dbo.change_table WITH (NOLOCK)
WHERE non_unique_value = 'something'
UPDATE dbo.change_table
SET somecol = newval
FROM dbo.change_table c
INNER JOIN
#temp_table t
ON (c.uid = t.uid)
2) Продолжительность транзакции
Чем дольше транзакция открыта, тем больше вероятность возникновения конфликта. Если есть способ сократить время, в течение которого записи остаются заблокированными, вы можете уменьшить вероятность возникновения тупиковой ситуации.
Например, выполните столько операторов SELECT (например, поисков) в начале кода, а не выполняйте INSERT или UPDATE, затем выполняйте поиск, затем INSERT и затем другой поиск.
Здесь можно использовать подсказку NOLOCK для SELECT в «статических» таблицах, которые не изменяются, уменьшая «след» блокировки кода.