Остановить транзакцию в потоке - PullRequest
0 голосов
/ 28 октября 2010

Я использую TransactionScope в потоке для выгрузки данных в мою базу данных SQL Server.

using (TransactionScope scope = new TransactionScope())
{
    // Dump data in database
    scope.Complete();
}

Транзакция является длинной транзакцией (~ 40 секунд) потому что большой объем данных.Это нормально.

Когда я выполняю Abort(), чтобы остановить поток во время этой транзакции, SQL Server кажется заблокированным на несколько минут.

Что происходит и как можно избежатьэто? * * 1013

1 Ответ

2 голосов
/ 28 октября 2010

Проще говоря: нельзя.

Сервер заблокирован в течение нескольких минут.

Нет. SQL Server занят отменой вашей транзакции. Он полностью оптимизирован для транзакций COMMIT, а не для их отмены. Отмена БОЛЬШИХ обновлений - МЕДЛЕННАЯ операция. В зависимости от конфигурации вашего сервера и объема данных это может занять несколько минут или даже часов.

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

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