.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 @   不是豆豆  阅读(2999)  评论(2编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
友情链接:迷途


点击右上角即可分享
微信分享提示