为何sys.sp_describe_first_result_set仅在Azure VM首次多CSV导入时返回1致进程挂起?
问题分析与解决方案
核心问题总结
- 配置SQL Server Agent每2分钟执行一次SSIS包用于CSV文件导入,仅在Azure VM创建后首次批量导入多个CSV时出现进程挂起
- 挂起关联系统存储过程
sys.sp_describe_first_result_set;1,阻塞标识为Blkby=-2(孤立分布式事务),会话处于等待事务完成的Execute命令状态 - 若先执行过单次CSV导入操作,后续批量导入可正常快速执行,无挂起问题
可能原因
- MSDTC初始化延迟:Azure VM首次启动后,分布式事务协调器(MSDTC)未完成预热或系统级注册,首次批量导入时SSIS尝试启动分布式事务,导致事务无法正常协调,触发孤立事务挂起。
- 元数据探测与事务冲突:
sys.sp_describe_first_result_set是SSIS包在执行前用于探测目标表元数据的系统存储过程,首次批量操作时,元数据扫描流程与分布式事务初始化流程发生资源冲突,导致会话进入等待状态。
解决方案
- 预初始化操作:在Azure VM部署完成后,手动执行一次单CSV文件的SSIS包导入,提前完成MSDTC初始化和SSIS元数据缓存,避免首次批量操作时的事务冲突。
- 作业前置步骤:修改SQL Server Agent作业,在批量导入任务前添加一个执行单文件导入的前置步骤,确保首次作业执行时先完成初始化。
- MSDTC配置检查:
- 确认Azure VM上的MSDTC服务已启动(可通过
services.msc查看) - 配置MSDTC安全设置,允许网络事务(若涉及跨资源访问)
- 验证Azure VM防火墙已开放MSDTC所需端口(默认135端口及动态端口范围)
- 确认Azure VM上的MSDTC服务已启动(可通过
- SSIS事务调整:临时将SSIS包的事务级别从要求改为支持,待首次执行完成后再恢复原事务设置,避免强制触发未初始化的分布式事务。
内容的提问来源于stack exchange,提问作者Anish Sinha
相关产品推荐
相关产品推荐

