我正在对我的网站进行压力测试。它使用实体框架6。
我有10个帖子。这就是他们正在做的事情:
在数据库死锁异常的情况下,它会在2分钟内崩溃(在读取时始终如一!)。
我已尝试在交易中包装步骤2-4,但这没有帮助。
我已经读过,从EF6开始,默认情况下,ExecuteSqlCommand被包装在一个事务中(https://msdn.microsoft.com/en-us/data/dn456843.aspx)。如何关闭此行为?
我甚至不理解为什么我的事务处于死锁状态,它们是读/写独立行。
是否有数据库设置我可以在某处增加挂起的事务队列的大小?
答案 0 :(得分:0)
我怀疑EF与它有什么关系。即使您正在读/写独立行,锁也可以升级并锁定页面。如果您不小心数据库设计,以及如何执行读写(顺序很重要),您可以使用EF或任何其他访问技术进行死锁。
答案 1 :(得分:0)
正在使用什么交易类型? .Net的TransactionScope默认为SERIALIZABLE,至少在我认为不使用EF的应用程序中。与其他类型(如ReadCommitted)相比,SERIALIZABLE事务在我的体验中更容易死锁。