Использование SQL Server 2008 R2 Я получаю блокировки, когда одновременно выполняется один и тот же оператор обновления (с разными параметрами). Вот тупиковый граф (извините не можете добавлять изображения на здесь же):Slock блокировки сервера с простым оператором обновления
http://i.stack.imgur.com/E6JBK.png
А вот фактический план выполнения:
http://i.stack.imgur.com/emm9i.png
Обновление, как это:
exec sp_executesql N'UPDATE mapping.IssuerAlternateName
SET
UseCount = UseCount + 1,
MostRecentlyAppeared = GETDATE(),
MostRecentlyAppearedUnderlyingAssetName = @p1
WHERE ID = @p0
',N'@p0 int,@p1 nvarchar(4000)',@p0=1234,@p1=N'blah blah blah'
Если я правильно понял вещи, мы пытаемся читать и писать по тому же индексу (PK_IssuerAlternateName_1)
.
Есть ли способ разрешить это? Мне было интересно, добавление дополнительного индекса в первичный ключ и использование WITH INDEX может исправить его, остановив чтение PK_IssuerAlternateName_1
(извините, что полное имя усечено в скриншоте плана выполнения).
Или это лучший вариант, чтобы жить с этим и повторить транзакцию, как это происходит в настоящее время в .NET-клиенте. Это, безусловно, успешное повторение, но было бы неплохо избежать тупиковой ситуации, если это возможно.
Благодаря
В настоящее время вы свертываете это с транзакцией? Если да, то какой уровень изоляции вы используете? – mallocation
Вызов его с использованием LINQ2SQL, поэтому context.ExecuteCommand() ... – MT1