.net core 在 linux 系統下執行 sql server 查詢,高並發負載時,可能會出現請求超時的異常(Execution Timeout Expired.)


異常信息:Execution Timeout Expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.

經測試,在單個用戶操作使用時很正常,但在高並發測試下,無論是 Microsoft.Data.SqlClient 還是 System.Data.SqlClient 都會出現此問題。

似乎此問題還可能導致事務執行錯誤,但也不會返回給程序結果,導致相關表在一段時間內鎖死,無法操作。

 

目前根據網上搜索反饋,可能是連接字符串中的 MARS(MultipleActiveResultSets)特性引起的問題,將其改為 false 即可。

 

目前僅在 Linux 系統下遇到此問題,Windows 系統下測試正常,據查可能跟系統網絡模型不同引發,但好像也有說 Windows 下也有相關問題,該問題目前在 github 上已被提出,但未解決(2020-10-12),持續關注。

在 Dapper 中提出的問題,已被移至 SqlClient 中:https://github.com/StackExchange/Dapper/issues/1435

在 SqlClient 中直接相關的問題:https://github.com/dotnet/SqlClient/issues/647

在上面問題討論中,提到與 MARS 相關問題:https://github.com/dotnet/SqlClient/issues/422

期待相關問題的解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM