繁体   English   中英

由于数据库阻塞,实体框架超时错误

[英]Entity Framework timeout error due to database block

有一个使用实体框架的项目(带有.NET 3.5的v1)。 它已经使用了几年,但是现在被更多的人使用。 开始收到超时错误,并已将其归结为几件事。 为了简单起见,假设我的数据库有三个表,product,part和product_part。 共有约1400个零件和少量产品。

用户可以向产品添加任意数量的零件。 我的问题是,当产品中添加了许多零件时,插入件会花费很长时间。 我认为这主要是由于网络流量/延迟造成的,但是插入所有1400则需要一分钟左右的时间。 如果有人在插入这些记录时尝试查看零件的详细信息,则会出现超时,并在SQL Server的“活动监视器”中看到一个块。

我该怎么做才能避免这种情况? 我很抱歉,如果以前有人问过我,我错过了。

谢谢,
缺口

我认为根本的问题是您的写入事务需要很长时间。 EF不擅长执行大规模DML。 它在单独的网络往返和单独的语句中执行每个插入。

如果要插入1400行,并且性能很重要,请使用TVP( INSERT ... SELECT * FROM @tvp )在一条语句中进行INSERT ... SELECT * FROM @tvp 或切换到批量复制,但我认为仅1400行不会有好处。

如果您的读取事务被阻止,这是一个问题,请打开快照隔离。 这样可以100%地保护读者,因为他们永远不会在快照隔离下阻塞。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM