【问题标题】:Does SQL Server Integration Services (SSIS) re-compile C# code every time it's run?SQL Server Integration Services (SSIS) 每次运行时都会重新编译 C# 代码吗?
【发布时间】:2010-02-01 20:11:02
【问题描述】:

我们有一个实时获取数据并将记录添加到数据库的过程。我们正在使用 SQL Server 2008 集成服务来运行我们的提取转换加载 (ETL) 过程。我们从一个 FTP 站点下载大约 50 个文件,对其进行处理,然后将文件归档。

问题在于每个文件的处理时间约为 17 秒,即使文件非常小(大约 10 行)并且处理代码也相当简单。查看机器上的负载,它受 CPU 限制,网络、磁盘或内存上的流量并不多。

我怀疑 SSIS 可能会在每次运行时重新编译 C# 代码。有没有人遇到过类似的问题?或者您是否使用过没有问题的类似过程?

是否有任何工具可以让我们分析 dtsx 包?

【问题讨论】:

    标签: sql-server ssis performance etl


    【解决方案1】:

    由于您使用的是 SSIS 2008,因此您的脚本任务始终是预编译的。

    【讨论】:

    • 这很有帮助。谢谢。你知道有什么方法可以分析这个过程并找出大部分时间都花在哪里了吗?
    • 这里有一些常见的技巧,可以让你在你的包中启用日志记录,以了解各种操作的成本。在不知道您的脚本任务做什么的情况下,很难说可能是什么问题。 msdn.microsoft.com/en-us/library/ms141031.aspx
    【解决方案2】:

    你确定首先是脚本任务吗?

    我有一些广泛的脚本任务,构建了许多字典,根据疯狂复杂的业务逻辑查看传入值是否在各种字典中,并进行翻译或其他工作。在任务初始化而不是在每一行方法中购买一次构建字典,处理得到了极大的改进,正如您所料。但这是一个非常特殊的情况。

    将验证包组件(在开始时或在每个控制流组件运行之前),这是您无法避免的一些开销。

    您是否在 SSIS 中的单个循环中处理所有文件?在这种情况下,不应重复数据流验证。

    【讨论】:

    • 文件正在控制流内的单个循环中处理。数据流不包含循环,但包含运行 c# 脚本的 3 个步骤。我应该将循环移出控制流吗?
    • @scurial 是否在循环内的数据流上设置了 DelayValidation?我认为它应该只验证一次,但在循环内部,我不确定。可以结合3个脚本吗?脚本有多复杂 - 在行处理方法中初始化的大量数据应该在行方法之外更好地初始化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多