如何检测 SSISDB 中的 SSIS 包组件类型?

How to detect a SSIS package component type in SSISDB?

我有一个SQL,可以帮助分析每个SSIS包组件的持续时间,它使用

事实是,我无法从该实体中的数据中理解event_messages.message_source_name 代表什么。我只有它的名字和它在包中的路径。 我需要了解每个组件类型:

例如,我有一个包含 4 个组件的 SSIS 程序包(名称 = "Test"):

  1. 执行Sql任务(名称="Start")
  2. 数据流任务(名称="Load")
  3. 脚本任务(名称="Check")
  4. 执行Sql任务(名称="Finish")

查询 SSISDB 我想得到这样的结果

Package_name |Component_name | Component_type
Test         | Start         | Execute Sql Task
Test         | Load          | Data Flow Task 
Test         | Check         | Script Task
Test         | Finish        | Execute Sql Task

可能吗?

我想你是在看下面的观点:

catalog.execution_component_phases

use SSISDB  
select package_name, task_name, subcomponent_name, execution_path,  
    SUM(DATEDIFF(ms,start_time,end_time)) as active_time,  
    DATEDIFF(ms,min(start_time), max(end_time)) as total_time  
from catalog.execution_component_phases  
where execution_id = 1841  
group by package_name, task_name, subcomponent_name, execution_path  
order by package_name, task_name, subcomponent_name, execution_path 

如果视图为空,则将包执行的日志记录级别设置为性能或详细。

更多信息:

https://docs.microsoft.com/en-us/sql/integration-services/system-views/catalog-execution-component-phases?view=sql-server-ver15

The fact is, I can't understand from data in this entities, what does event_messages.message_source_name stand for.

它描述了在Name 属性 中定义的生成此消息记录的对象名称。与 message_source_id 一起,它可以识别消息的来源。 IE。在您的情况下,它可以是包的名称或任务或容器或数据流的名称。
根据事件日志信息,您只能区分以下对象:

  • 套餐
  • 任务
  • 容器
  • 数据流任务

好消息 - 此 table 已填充标准日志记录级别。

没有简单的方法可以从 SSISDB 获取组件类型。要获取组件类型,您需要分析包源代码。问题是它以加密方式存储在 internal.packages 中。您可以使用 catalog.get_project SSISDB 存储过程 export 包含您感兴趣的包的整个项目,然后将其解压缩并阅读所引用包的 XML 源代码。通过使用 message_source_id GUID,您可以识别 XML 中的任务并读取其类型。