sql-server - SSIS 数据流任务在执行预执行阶段时挂起

标签 sql-server ssis etl

我有一个正在执行的数据流任务。
流程很简单,对不同的表进行两次查询(都带有几个连接),然后通过公共(public) id 对输出进行排序和合并,向所有记录添加静态列,将行计数保存在用户变量中以供以后使用使用并最终插入到另一个数据库上的表中。 我们正在使用 OLE DB 源和目标。源是 MSSQL 2000,目标是 MSSQL 2012

症状:

  • 执行时,数据流会获得通常的黄色“正在运行”图标。然而,当您双击查看数据流时,没有任何元素有任何黄色、红色或绿色标记。
  • 这种情况持续了很长一段时间,一开始持续了大约 20 分钟,之后时间开始变得更长,或者根本就不再出现。
  • 输出显示:
    信息:加载沙箱表处的 0x40043006,SSIS.Pipeline:准备执行阶段正在开始。
    信息:加载沙箱表中的 0x40043007,SSIS.Pipeline:预执行阶段正在开始。

    在执行停止之前什么也没有。
  • 是的,这以前有效过。是的,我们使用了单个查询(在存储过程中)来执行此 ETL,但我们希望将所有步骤迁移到 SSIS。
  • 失败的解决方案:

  • 没有查找。
  • 任务流的默认缓冲区大小已增加至 40485760,然后增加至 80971520。
  • 任务的默认缓冲区最大行数设置为 1000000。
  • 该任务的延迟验证已设置为 True。
  • 任务内的所有元素均已将验证外部数据设置为 False。
  • 两个查询都有:
    SET FMTONLY OFF;
    SET NOCOUNT ON;

    在开头添加。
  • 两个查询均将 MAXDOP 设置为 1。
  • 将项目的 Run 64 位运行时设置为 False。
  • 将目标加载从表或 View 更改为表或 View - 快速加载,无需锁定或约束。
  • 将每批行数设置为 1000 以实现快速加载。
  • 一些解决方法建议将任务流分成两个或多个任务流。但这是不可能的,因为我们需要做的是合并两个源查询中找到的信息。
  • 额外位: 我真的希望有人能帮助我。我对 SSIS 相当陌生,这是我第一次使用它。我通常使用 Pentaho 进行 ETL,但客户需要在 SSIS 上实现该解决方案。我已经和这个问题斗争了几天了,我开始没有解决它的想法了。

    <小时/>

    当通过命令行运行时,它也被卡住,我得到以下输出:

    Progress: 2013-03-19 14:36:26.21
       Source: Load Sandbox Table
       Validating: 0% complete
    End Progress
    Progress: 2013-03-19 14:36:26.21
       Source: Load Sandbox Table
       Validating: 12% complete
    End Progress
    Progress: 2013-03-19 14:36:26.22
       Source: Load Sandbox Table
       Validating: 25% complete
    End Progress
    Progress: 2013-03-19 14:36:26.22
       Source: Load Sandbox Table
       Validating: 37% complete
    End Progress
    Progress: 2013-03-19 14:36:26.23
       Source: Load Sandbox Table
       Validating: 50% complete
    End Progress
    Progress: 2013-03-19 14:36:26.25
       Source: Load Sandbox Table
       Validating: 62% complete
    End Progress
    Progress: 2013-03-19 14:36:26.25
       Source: Load Sandbox Table
       Validating: 75% complete
    End Progress
    Progress: 2013-03-19 14:36:26.25
       Source: Load Sandbox Table
       Validating: 87% complete
    End Progress
    Progress: 2013-03-19 14:36:26.25
       Source: Load Sandbox Table
       Validating: 100% complete
    End Progress
    Warning: 2013-03-19 14:36:26.26
       Code: 0x80047076
       Source: Load Sandbox Table SSIS.Pipeline
       Description: The output column "ITEM_OID (1)" (47) on output "Merge Join Outp
    ut" (28) and component "Merge Join" (11) is not subsequently used in the Data Fl
    ow task. Removing this unused output column can increase Data Flow task performa
    nce.
    End Warning
    Progress: 2013-03-19 14:36:26.27
       Source: Load Sandbox Table
       Prepare for Execute: 0% complete
    End Progress
    Progress: 2013-03-19 14:36:26.27
       Source: Load Sandbox Table
       Prepare for Execute: 12% complete
    End Progress
    Progress: 2013-03-19 14:36:26.27
       Source: Load Sandbox Table
       Prepare for Execute: 25% complete
    End Progress
    Progress: 2013-03-19 14:36:26.27
       Source: Load Sandbox Table
       Prepare for Execute: 37% complete
    End Progress
    Progress: 2013-03-19 14:36:26.27
       Source: Load Sandbox Table
       Prepare for Execute: 50% complete
    End Progress
    Progress: 2013-03-19 14:36:26.27
       Source: Load Sandbox Table
       Prepare for Execute: 62% complete
    End Progress
    Progress: 2013-03-19 14:36:26.27
       Source: Load Sandbox Table
       Prepare for Execute: 75% complete
    End Progress
    Progress: 2013-03-19 14:36:26.27
       Source: Load Sandbox Table
       Prepare for Execute: 87% complete
    End Progress
    Progress: 2013-03-19 14:36:26.27
       Source: Load Sandbox Table
       Prepare for Execute: 100% complete
    End Progress
    Progress: 2013-03-19 14:36:26.31
       Source: Load Sandbox Table
       Pre-Execute: 0% complete
    End Progress
    Progress: 2013-03-19 14:36:26.31
       Source: Load Sandbox Table
       Pre-Execute: 12% complete
    End Progress
    Progress: 2013-03-19 14:36:26.31
       Source: Load Sandbox Table
       Pre-Execute: 25% complete
    End Progress
    Progress: 2013-03-19 14:36:26.34
       Source: Load Sandbox Table
       Pre-Execute: 37% complete
    End Progress
    Progress: 2013-03-19 14:36:45.69
       Source: Load Sandbox Table
       Pre-Execute: 50% complete
    End Progress
    

    之后它再次卡住。

    解决方案 (在此发布此内容是因为我在另外 5 小时内无法回答自己的问题,当允许时我会这样做。)< br/> 我终于明白了。
    事实证明验证存在问题,但不仅仅是 SSIS 元素经过该验证,如问题的第四个失败解决方案中所述。
    CONNECTIONS 也经过验证并具有自己的延迟验证属性,需要将其设置为 true。
    之后,整个过程的执行时间从 40 多分钟或没有运行减少到不到一分钟(这只是更大过程的一个步骤)
    我希望遇到同样问题的人能够轻松找到这个解决方案,因为有很多人遇到这个问题,而且网上几乎没有发布解决方案。

    简而言之:检查任务中涉及的所有元素(包括数据库连接)是否已将延迟验证属性设置为 True。

    最佳答案

    我终于明白了。 事实证明验证存在问题,但不仅仅是 SSIS 元素经过验证,如问题的第四个失败解决方案中所述。 CONNECTIONS 也经过验证并具有自己的延迟验证属性,需要将其设置为 true。 之后,整个过程的执行时间从 40 多分钟或没有运行减少到不到一分钟(这只是更大过程的一个步骤) 我希望遇到同样问题的人能够轻松找到这个解决方案,因为有很多人遇到这个问题,而且网上几乎没有发布解决方案。

    简而言之:检查任务中涉及的所有元素(包括数据库连接)是否已将延迟验证属性设置为 True。

    关于sql-server - SSIS 数据流任务在执行预执行阶段时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15508594/

    相关文章:

    SQL 条件求和

    mysql - 具有对角线结果的一对多 SQL 查询

    sql-server - Spring 批处理 : efficient way to query results of a stored procedure within a tasklet

    sql - 如何提示从SSIS包中输入?

    sql - 在SQL Server中,如何在存储过程中传递可选参数?

    ssis - 如何在SSIS中动态获取带时间戳的文件名

    hadoop - ETL关联HADOOP数据库Hbase?

    python - 如何创建一个 SSIS 包以从 Python REST API 请求 ETL JSON 到 MSSQL 服务器?

    sql - SSIS SQL 执行任务错误 : unable to run some sql queries

    tfs - 部署 SSIS 包时出现 MSBuild DeploymentModel 无法识别的错误