如何在数据流任务中测量不同任务的持续时间?

6

我正在优化一个数据流任务,我想知道每个组件花费了多少时间。我得到了以下任务:

enter image description here

我该如何找出每个组件花费的时间?如果能找到其他资源(如内存、CPU等)的信息,那就更好了。

主要我关注每个组件所花费的时间。


1
如果您的数据流程看起来很像这样+目标,但性能不如预期,那么可以确定源查询返回了过多的数据。只需获取所需列并调整源系统中的查询即可。 - billinkc
@billinkc 这是对 Sybase 的查询,速度很慢 :( 那边没有优化选项留下。 - Pritesh
2个回答

4

若要快速查看经过的时间,请参见“执行结果”选项卡。它会在任务/组件开始和完成时显示经过的时间。

另外,

监视数据流引擎的性能 这需要更多投入,而且在我的电脑上运行时速度较慢。但你可能不一定会有同样的情况。

此外,如果需要排除故障,SSIS 包含了一个相当好的错误、信息和无数其他事件的记录机制:

从菜单中选择 SSIS,Logging...

你需要指定提供程序。为了让事情变得简单,直到你掌握它,我建议使用文本文件的 SSIS 日志提供程序。这是 CSV 格式,你可以自定义返回的信息。

要监视包中的所有组件: 点击详细信息选项卡,并选择 OnInformation 和 OnPipelineRowsSent,如 billinkc 所建议的那样。请注意,日志记录对于故障排除很有用,但 OnPipelineRowsSent 会产生大量输出,因此在部署到生产环境时可能需要将该事件从日志中移除,以减少写入时间和日志大小。

SSIS Log - For entire package

要仅监视特定任务: 取消选中包,然后从包树视图中选中要监视的数据流任务/组件。选定后,选择要记录的事件(从 OnInformation 开始,如 billinkc 所建议的那样)。

SSIS Log - for specific component


仅澄清一下,如上所示,当一个项目被灰化时,这表示父容器的日志记录细节将被继承。因此,如果导入CG1选择了OnError和OnExecStatusChanged,PD Stub将记录这些事件,但LoadCG1 Flat F 记录OnInformation事件。当您像对Load CG1 Flat F所做的那样单击它时,将覆盖已捕获的事件。我通常发现在根级别设置日志记录足以满足需求。 - billinkc
这是我的疏忽,截图不太好。我在包级别记录了 OnError 和 OnWarning 事件。我会进行编辑。 - Charles Byrne

2
如果我想确定数据流组件之间的时间,我会使用本地日志记录并捕获"OnPipelineRowsSent"事件。这表明在转换之间移动了多少行。James在sqlteam上有一个很好的查询和文档介绍。需要注意的一点是,在包中存在数据流之前,无法记录"OnPipelineRowsSent"事件。从创建模板包的角度来看,我一直觉得这很遗憾。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接