Поможет ли разбиение исправить мои тупиковые проблемы? - PullRequest
0 голосов
/ 25 октября 2011

У меня есть приложение, которое обновляет таблицу в моей базе данных SQL Server 2005.Приложение имеет один поток для каждого из моих регионов, и эти потоки работают одновременно.

В редких случаях я сталкиваюсь с ошибкой взаимоблокировки SQL Server при обновлении таблицы.

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

У кого-нибудь есть какие-либо мысли по этому поводу?

Ответы [ 2 ]

1 голос
/ 25 октября 2011

Если ни одна нить не обновит ту же строку, вам следует использовать подсказку with rowlock. Если вы уже используете эту подсказку, то проблема вызвана чем-то иным, кроме стандартного тупика. (Это нечто иное, чем тупик, который заставляет код работать так медленно, что движок убивает поток сообщением тупика.)

1 голос
/ 25 октября 2011

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

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

Что касается SQL Server 2005, то повышение блокировки происходит из строки -> страница -> таблица.Только в SQL Server 2008 блокировка разделов была размещена в рамках этой эскалации.

Вам нужно углубиться в тупик и захватить граф взаимоблокировок, чтобы понять, что происходит в тупике.Больше информации на графиках в MSDN: http://msdn.microsoft.com/en-us/library/ms188246(v=SQL.90).aspx

...