【发布时间】:2018-10-12 09:11:06
【问题描述】:
我的生产应用程序中不时发生这种情况。
我的场景比较简单,如下:
using (var ctx = new MyDbContext())
{
ctx.SMSReplies.Add(new SMSReply
{
//Set properties here
});
ctx.SaveChanges();
}
有时这会失败并出现以下错误:
System.Data.Entity.Infrastructure.DbUpdateException:发生错误 在更新条目时。有关详细信息,请参阅内部异常。
---> System.Data.Entity.Core.UpdateException:更新条目时出错。有关详细信息,请参阅内部异常。
---> System.Data.SqlClient.SqlException:执行超时已过期。在操作完成之前经过的超时时间或 服务器没有响应。声明已终止。
---> System.ComponentModel.Win32Exception: 等待操作超时
我知道我可以增加我的 DbContext 的命令超时,但这不是重点;我的担忧远不止于此……
默认超时是 30 秒,所以我担心的是……我的数据库中到底发生了什么,这可能导致将一行简单地插入到少于 5000 行的表中需要超过 30秒?!?!
是否有任何 DBA 可以指导我应该对我的数据库进行哪些性能监控和调整以阐明根本原因?
【问题讨论】:
-
在您尝试插入时,可能有其他进程在
SMSReplies表上持有表锁(例如,因为它执行复杂的查询),从而导致死锁。见A very quick guide to deadlock diagnosis in SQL Server -
谢谢@GeorgPatscheider 我想到了……但是死锁会返回一个不同的异常(关于您的某些事情已被选为死锁受害者。重新运行您的事务)。
标签: entity-framework database-performance database-tuning