这很可能不是 SQL Server 问题,但设置似乎只影响 SQL Server 的 BULK INSERTS。
我们最近移动了 VM 硬件,所有移动的来宾都将其虚拟交换机从标准更改为分布式。
然后我开始接收
从网络读取输入流时发生致命错误。会话将被终止(输入错误:64,输出错误:0)
在 BULK INSERT 操作期间在两个 SQL 服务器上。其中一台 SQL 服务器是具有新配置的虚拟机,另一台是物理服务器。两个 BULK INSERT 操作都源自具有新配置的 VM。BULK INSERT 不会每次都失败,它会非常随机。
当我们将虚拟交换机更改为标准交换机而不是分布式交换机时,问题就消失了。
我正在寻找更多关于为什么它不适用于分布式交换机而不是分辨率的解释。我的猜测是 BULK INSERT 操作是串行的,并且使用分布式交换机,数据包通过不同的主机路由,其中一些主机可能比其他主机更忙,并且到达目标服务器的时间超过了某个延迟阈值。(注意:在源服务器或目标服务器上发生错误时,Windows 事件日志中没有任何内容)
更新:原来问题是由于 NIC。我们所有的虚拟机都配置了一个 E1000 网卡,它在标准交换机上运行良好。一旦我们转向分布式交换机,我们开始看到大数据传输的问题,而不仅仅是 sql 查询。将 NIC 更改为 VMXNET3 似乎已解决该问题。
我有一个过程可以在中央服务器上恢复我的所有备份以进行测试。我最近将此服务器升级到 SQL Server 2012,现在从 SQL Server 2008 R2 恢复主服务器时出现错误。从 SQL Server 2012 和 SQL Server 2005 还原工作正常。尝试恢复到 SQL 2014 时,我也得到了相同的结果。
这是我的恢复声明:
RESTORE DATABASE masttest
FROM DISK = 'c:\temp\master.bak'
WITH MOVE 'master' TO 'c:\temp\masttest.mdf',
MOVE 'mastlog' TO 'c:\temp\masttest.ldf';
Run Code Online (Sandbox Code Playgroud)
这就是结果。数据库最终处于恢复挂起状态。
Processed 400 pages for database 'masttest', file 'master' on file 1.
Processed 3 pages for database 'masttest', file 'mastlog' on file 1.
Converting database 'masttest' from version 661 to the current version 706.
Database 'masttest' running the upgrade step from version 661 …Run Code Online (Sandbox Code Playgroud)