【问题标题】:SSIS - Best Practices When SSIS HangsSSIS - SSIS 挂起时的最佳实践
【发布时间】:2019-01-08 14:53:27
【问题描述】:

昨晚我的 SSIS 挂了。我不太确定为什么。今天早上我根据输出确定了哪个包挂起。我正在查看sp_who2,但我看不到在运行作业的用户下运行的任何进程。
我想知道当我的 SSIS 挂起时我应该做什么。它目前仍在运行,但似乎没有运行任何东西。

【问题讨论】:

  • 你是如何执行这个包的?直接来自 Visual Studio 调试、SSIS 目录或 dtexec?你能查明悬挂的步骤吗?如果调试,任何断点设置?任何可能挂起的外部验证问题?对另一个 .exe(或此类)的任何调用可能正在等待它完成同步调用?我们需要更多信息。

标签: sql-server logging ssis etl ssis-2012


【解决方案1】:

首先将包部署到 SSISDB 并从那里运行它。如果您尚未安装 SSISDB 目录,可以在 here 找到更多信息。在此之后启用登录包并查看结果,特别是包挂起的阶段。执行此操作时,请查找 PipelineComponentTime 事件,该事件指定每个组件在特定阶段花费的时间。可能感兴趣的几个阶段是ProcessInput 阶段,这是处理传入记录的位置,以及PrimeOutput 阶段,这是将数据放入缓冲区并进一步发送到数据流的位置。启用日志的概述如下。

  • 右键单击控制流上的任意位置并按Logging...
  • 选中容器字段中包旁边的复选框以启用日志记录。 使用提供者类型字段选择您希望日志记录存储的位置。如果您使用 SQL Server 的 SSIS 日志提供程序,则将在数据库中创建 SYSSSISLOG 表,该数据库设置为使用的 OLE DB 连接管理器中的初始目录。在详细信息窗格中,选择您将记录的事件。选择这些后,单击Advanced>> 按钮设置将记录的字段。
  • 接下来检查您要为其启用日志记录的组件。您需要对您怀疑或已确认遇到延迟的任何组件执行此操作。如果任何数据流任务启用了日志记录,则前面提到的PipelineComponentTime 事件将在这些任务的详细信息窗口下可用。
  • 要从 SSIS 目录监视包,请使用 SSISDB DMV。执行此操作时,请确保在执行包时将日志记录级别设置为至少基本。有几种方法可以做到这一点,最简单的可能来自 GUI。在 SSISDB 的“执行包”窗口中执行包之前,可以在“高级”选项卡上找到“日志记录级别”字段。
  • 如果包部署到 SSISDB 并在 SQL 代理中作为作业运行,则可以从作业步骤设置日志记录。打开“作业步骤属性”窗口,转到“配置”选项卡,然后转到“高级”选项卡,您将在其中看到“日志记录级别”字段。
  • SSISDB 中有许多 DMV,其中包含有关包配置和执行的详细信息。 catalog.event_messagesexecutable_statisticscatalog.operation_messages 是一些有用的。要更深入地了解组件以及发生延迟的位置,我建议您使用 catalog.execution_component_phases,这需要 Performance 或 Verbose 的日志记录级别。
  • 如果性能因包中使用的参数而异,请使用较慢执行实例中的 execution_id 查询 catalog.execution_parameter_values DMV 以查看这些执行中的参数设置。李>

【讨论】:

  • 我想知道在您完成所有这些努力之后,OP 是如何不赞成这个答案的。 +1
  • 感谢@Hadi,感谢您的反馈。
猜你喜欢
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多