線下的測試機器老是報錯,從errorlog里看到大量的4014錯誤 於是谷歌了一下,發現了一篇文章:https://www.mssqltips.com/sqlservertip/3538/fixing-sql-server-fatal-error-4014/ 大家知道現在的網卡內置功能都比較厲害,有
SQL Server出現錯誤: 4014
線下的測試機器老是報錯,從errorlog里看到大量的4014錯誤
A fatal error occurred while reading the input stream from the network. The session will be terminated (input error: 0, output error: 0). 錯誤: 4014,嚴重性: 20,狀態: 16。
於是谷歌了一下,發現了一篇文章:https://www.mssqltips.com/sqlservertip/3538/fixing-sql-server-fatal-error-4014/
大家知道現在的網卡內置功能都比較厲害,有些功能甚至可以代替CPU去執行,於是微軟發佈了Scalable Networking Pack (SNP) 可伸縮網路包,可伸縮網路包包括了以下3個主要功能
TCP/IP Chimney Offload
Receive Side Scaling (RSS)
Network Direct Memory Access (NetDMA)
大家可以用下麵命令查看上面3個功能是否是enabled
netsh int tcp show global
一般操作系統會預設開啟Chimney Offload功能,這個是TCP/IP網路包下推功能,本來是CPU處理的現在交給網卡處理,減輕CPU負擔,加快網路包處理速度
但是不是所有網卡都支持Chimney Offload功能,由於線下測試機器是普通家用PC,所以網卡驅動並不帶有這個內置功能
解決辦法是禁用Chimney Offload
netsh int tcp set global chimney=disabled netsh int tcp set global rss=disabled
禁用之後,再執行netstat命令看一下處理是否遷移回CPU
netstat -t
如果最後一列是InHost,那麼表示數據包的處理邏輯是CPU上完成,而不是在網卡上完成
至此,問題解決,errorlog也沒有發現4014錯誤
如有不對的地方,歡迎大家拍磚o(∩_∩)o