Транзакция блокирует оператор вставки - PullRequest
1 голос
/ 07 июля 2011

У меня есть внешняя распределенная транзакция, которая блокирует (вешает) оператор вставки в таблицу.У меня нет контроля над внешней транзакцией.Как избежать этой блокировки на очень детальном уровне.Я попытался поместить Transaction Suppress вокруг этой вставки на уровне .net.Это не сработало.

Пожалуйста, посмотрите на изображение для получения подробной информации.

Любое решение этой проблемы может быть очень полезным enter image description hereЯ ценю вашу поддержку.

1 Ответ

1 голос
/ 07 июля 2011

Это ожидается, если есть сильное пересечение между тем, на что смотрят две операции, и не находятся в одной и той же транзакции. Внешняя транзакция предположительно взяла блокировку диапазона ключей, которая вызывает блокировку (по-видимому, внешняя транзакция является «сериализуемым» уровнем изоляции). Здесь вы ничего не можете сделать, кроме:

  • подключиться / работать в той же транзакции, а не работать вне ее
  • понизить уровень изоляции внешней операции, чтобы не генерировалась блокировка диапазона клавиш
  • если внешней операцией является запрос (выборка, а не вставка / обновление / удаление), тогда используйте NOLOCK или аналогичный, чтобы избежать его блокировки)

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

...