SQL Server 2012迁移后SSIS包运行缓慢报错原因排查问询
问题排查步骤
1. 优先排查网络链路问题
你已经确认同一条查询在新旧服务器执行耗时差10倍以上,且报错为TDS流协议错误、连接被强制关闭,首先排查底层网络:
- 检查新服务器的网卡配置:确认是否开启了自动协商、巨帧(Jumbo Frame)配置是否和旧服务器/网络交换机匹配,两端MTU值不一致会导致大量分包丢包,直接拖慢TDS传输速度
- 用
ping -l 4096 -t 新服务器IP持续测试大包传输丢包率,正常应该0丢包,若出现丢包直接联系网络运维排查链路故障 - 检查新服务器是否开启了TCP Chimney Offload、TCP Segmentation Offload这类网卡卸载功能,SQL Server场景下这类功能经常引发传输异常,可通过命令
netsh int tcp show global查看,执行netsh int tcp set global chimney=disabled临时禁用验证效果
2. 核查SQL Server 2012实例配置
- 确认实例的
远程查询超时配置是否和旧服务器一致,执行如下语句查看:
sp_configure 'show advanced options',1; RECONFIGURE; sp_configure 'remote query timeout';
默认值为600(10分钟),你的查询需要12分钟刚好触发超时,可临时调大到1800验证是否解决报错
- 检查实例的
最大服务器内存配置是否合理,确保留给操作系统的内存不少于4G,内存不足会导致SQL Server缓存频繁换入换出,拖慢数据传输效率 - 验证新服务器的TDS端点配置是否正常,执行
SELECT * FROM sys.endpoints WHERE name = 'TSQL Default TCP'确认状态为STARTED,未做额外访问限制
3. SSIS运行时配置验证
- 检查SSIS目录(SSISDB)的日志级别是否被调整为
详细或性能分析,过高的日志级别会导致行传输过程中大量写日志,拖慢执行速度 - 检查SSIS包的数据流任务的
默认缓冲区大小、默认缓冲区最大行数配置,2012版本默认值和2008R2有差异,可调整为和旧包一致的参数:通常缓冲区大小设为10485760(10MB),最大行数根据单行数据量调整为10000~100000区间 - 确认Lookup组件的缓存模式是否为
全缓存,若为无缓存或部分缓存会在每行处理时发起查询,大幅增加交互次数,拖慢传输速度
4. 临时验证方案
你可以先将查询结果导出为CSV文件,对比新旧服务器导出相同数据的耗时:
- 若导出速度差距和查询执行速度差距一致,可100%确认是网络/实例传输配置问题
- 若导出速度接近,再排查SSIS连接管理器的配置,确认连接字符串中的
Packet Size参数是否设为4096或更高,和旧服务器配置一致
内容的提问来源于stack exchange,提问作者user7256821
相关产品推荐
相关产品推荐

