Как избежать блокировок таблицы при вставке данных в таблицу - PullRequest
3 голосов
/ 15 ноября 2011

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

Эта функциональность записана в службе, и более одного раза служба (одни и те же службы, различные установки) выполняет эту задачу (вставляя данные в таблицы) одновременно.Эти сервисы вставляют совершенно разные строки в таблицы и не зависят ни от чего.

Но когда мы запускаем эти сервисы, мы получаем взаимоблокировку этих операторов вставки.

Код выглядит следующим образом:

  1. Открыть соединение с БД
  2. Начать транзакцию
  3. Вставить данные в таблицы
  4. Подтвердить транзакцию.

Всеслужбы выполняют эти шаги для другого набора данных, находящихся в одних и тех же 15 таблицах.

Трассировка SQL Profiler предполагает наличие исключительных блокировок для этих таблиц при вставке.

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

1 Ответ

2 голосов
/ 15 ноября 2011

Вы не получаете взаимоблокировки только из таблиц блокировки, даже из-за исключительной блокировки.Если таблицы заблокированы, новые вставки будут просто ждать завершения существующих вставок (при условии, что вы не используете no wait подсказку).

В случае блокировки ресурсов таким образом, что операторы sql вызывают тупикине может продолжатьсяИщите неограниченные суб-селекторы или операторы where, которые недостаточно конкретны в ваших операторах вставки.

Опубликуйте свой sql, чтобы мы могли видеть, что вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...