SQL Server 系统缓冲区空间不足或队列已满(错误:10055)
最近数据库连接总隔段时间出现provider: TCP 提供程序, error: 0 - 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。 的错误。但这并不是SQL Server服务本身导致了此问题,实际上是来自 Windows系统,由机器的内存或TCP端口问题导致。我这里是由于连接过多,导致端口耗尽(根据操作系统的报错来排查)。
已经知道问题根本原因之后,那么解决问题就变得简单了。
Windows 2008 以后,微软遵从国际标准,动态端口的数量调整为16384个 (从49152起始,到65536结束),如果服务器对外有大量连接,而TCP默认的Time Wait Delay时间为2分钟这可能导致端口耗尽。
解决方法如下:
以管理员身份打开CMD,运行如下命令:
1 2 | netsh interface ipv4 show tcpstats netsh int ipv4 show dynamicport tcp |
查看一下,是否端口耗尽,目前端口数量是多少,如果确认端口耗尽就需要增大端口数量来解决。
2、 增大动态端口数量
1 | netsh int ipv4 set dynamicport tcp start=1025 num=60000 |
其中1025是起始端口号,num为数量,上述命令意思为从1025开始的60000个端口,到61025结束。
注:该步骤无需重启机器, 立即生效
3、 降低Time Wait时间,最低为30秒
打开注册表,定位到 HKLM/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters
新增键值 TcpTimedWaitDelay,类型REG_DWORD , 设置为十进制30
注:修改后重启生效
以上是对ipv4下的tcp协议操作,其他协议命令如下:
netsh int ipv4 show dynamicport tcp netsh int ipv4 show dynamicport udp netsh int ipv6 show dynamicport tcp netsh int ipv6 show dynamicport udp
--modify 2021/12/1
4、最近还是发现会出现此类问题,此时需要检查文件句柄
分类:
SQL Server DBA
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了