这很可能不是 SQL Server 问题,但设置似乎只影响 SQL Server 的 BULK INSERTS。
我们最近移动了 VM 硬件,所有被移动的来宾都将其虚拟交换机从标准更改为分布式。
然后我开始收到
从网络读取输入流时发生致命错误。会话将被终止(输入错误:64,输出错误:0)
在 BULK INSERT 操作期间在两个 SQL 服务器上。其中一个 SQL 服务器是具有新配置的 VM,另一个是物理服务器。两个 BULK INSERT 操作都源自具有新配置的 VM。BULK INSERT 不会每次都失败,它是非常随机的。
当我们将虚拟交换机更改为标准交换机而不是分布式交换机时,问题就消失了。
我正在寻找更多关于为什么它不适用于分布式交换机而不是解决方案的解释。我的猜测是 BULK INSERT 操作是串行的,并且使用分布式交换机,数据包正在通过不同的主机进行路由,其中一些主机可能比其他主机更忙,并且到达目标服务器时超过了某个延迟阈值。(注意:在源服务器或目标服务器上出现错误时,Windows 事件日志中没有任何内容)
更新:原来问题是由于 NIC。我们所有的虚拟机都配置了 E1000 NIC,它在标准交换机上运行良好。迁移到分布式交换机后,我们开始看到大数据传输的问题,而不仅仅是 sql 查询。将 NIC 更改为 VMXNET3 似乎已经解决了这个问题。
我建议使用 Wireshark 或 Microsoft NetMon 并嗅探流量以查看此处发生的情况。也可能与 TCP 烟囱卸载功能有关,假设在 NIC 级别发生了一些变化:
http://support.microsoft.com/kb/942861
纯粹的 vmware/网络问题,它出现了。
我建议尝试查找从客户端到非 SQL(ping 或其他任何东西)的服务器的连接问题。这将帮助您找到更清晰的故障排除路径。
我们一周前遇到了这个错误。我们的网络团队、安全团队和数据库团队搜索所有内容。在研究结束时,我们检测到了错误资源。它是 IPS 设备。询问您的安全团队在 IPS 设备上是否有任何签名。