.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

期待相关问题的解决。

posted @ 2020-10-12 00:39  不是豆豆  阅读(2738)  评论(2编辑  收藏  举报
友情链接:迷途