我正在使用Visual Studio Web應用程序使用ASP.NET MVC & C#。我有一個超過100000個記錄的Excel文件,用於導入SQL Server 2008 R2。如何優化數據導入SQL Server與100000個併發用戶數100000條記錄
我使用SqlBulkCopy
與ado.net DataTable
複製數據到表(Table1
)。
然後驗證和處理數據並用有效/無效標記。
然後添加和使用存儲過程從Table1
更新記錄到3個表(Table2
,Table3
和Table4
)。
Table4
包含2個觸發器,它使用光標更新Table4
和另一個表(Table2
)中與其有關的幾條記錄。
從本地機器以調試模式測試10000分鐘的記錄時,需要1分鐘。
如果10或100個用戶同時導入,它會支持嗎?
有沒有更好的過程來改進和支持許多併發用戶?
我的電腦配置:
- 的Windows 10 64位
- AMD FX QuardCore 3.6 GHz處理器
8GB RAM
的Excel文件包含50列
- BulkCopy需要2 - 3秒
- 存儲的p rocedure需要30秒到2分鐘
當我和5個併發用戶,2個或3個過程測試成功執行,我得到這個錯誤:
Transaction (Process ID 66) was deadlocked on lock | communication buffer resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
看來你的問題是關於存儲過程的性能和併發性。添加DDL(包括索引)以及proc和觸發代碼到您的問題。通常,遊標對性能不利,將觸發器代碼移動到proc可能會更好。 –
導入中有很多部分。確定哪個部分花費的時間最長。我總是懷疑遊標。 –
我試過禁用觸發器,但沒有成功。 – Debashis