У меня есть следующий унаследованный код, который находится в наших средах Dev, Test и Prod.По какой-то причине, на прошлой неделе, сейчас это вызывает сбои в автоматизации или контроле качества.В ходе дальнейших исследований в нашем APM я обнаружил, что последовательно получаю следующее исключение в нашей среде разработки, но никак не в Test или Prod.Не уверен, почему он внезапно отключил автоматизацию контроля качества.
System.Data.SqlClient.SqlException -
Транзакция (ID процесса 88) заблокирована при блокировке |ресурсы буфера связи с другим процессом и были выбраны в качестве жертвы тупика.Перезапустите транзакцию.
Вопрос: этот код плохо написан?Я не понимаю, как добавление строки может привести к тупику.
// TrackEntities: DbContext
using (var dbContext = new TrackEntities())
{
ErrorAudit audit = new ErrorAudit
{
Error = error,
CustomerNumber = entry.CustomerNumber.ToString(CultureInfo.InvariantCulture),
RequestContextId = entry.RequestContextId,
SessionId = entry.SessionId,
Username = entry.Username,
Timestamp = entry.Timestamp
};
dbContext.ErrorAudits.Add(audit);
dbContext.SaveChanges();
}
Версия SQL Server:
SELECT @@VERSION
Microsoft SQL Server 2016 (RTM-GDR) (KB4019088) - 13.0.1742.0 (X64)
Jul 5 2017 23:41:17
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows Server 2012 R2 Datacenter 6.3 <X64> (Build 9600: ) (Hypervisor)
Вот схема тупиковой ситуации