簡體   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