使用 SSIS 包优于存储过程的优势? [关闭]

Posted

技术标签:

【中文标题】使用 SSIS 包优于存储过程的优势? [关闭]【英文标题】:Advantages of using SSIS packages over stored procedures? [closed] 【发布时间】:2010-12-18 21:50:18 【问题描述】:

如果我可以使用存储过程来满足所需的 ETL 要求,那么使用 SSIS 包有什么好处吗?我的 ETL 东西没什么大不了的。

我想使用一种旧技术。我喜欢 SQL。 旧技术并不等于过时,因为存储过程不会很快消失。

【问题讨论】:

【参考方案1】:

如果您的 ETL 主要是 E 和 L,T 很少,并且如果您可以编写您的 SP,使它们不依赖于游标,那么采用仅 SP 的路线可能没问题。

对于更复杂的过程,特别是那些涉及大量转换、缓慢变化的维度、数据挖掘查找等的过程,SSIS 具有三个优势。

首先,它非常有效地管理内存,与单独使用 T-SQL 相比,它可以带来巨大的性能提升。

其次,图形界面让您可以比手工制作的 T-SQL 更轻松地构建大型、复杂和可靠的转换。

第三,SSIS 让您可以更轻松地与其他外部源进行交互,这对于数据清理等事情非常方便。

【讨论】:

如果您将数据从一个实例移动到另一个实例,或者您希望 ETL 以这种方式轻松扩展,我只会使用 SSIS。如果您在同一实例上的不同数据库上执行 ETL,我会保持简单并使用 T-SQL。我主要使用 SSIS 作为工作流引擎,将数据从一个地方移动到另一个地方,然后调用 T-SQL 过程。 “第二,图形界面让你比手工制作的 T-SQL 更容易构建大型、复杂和可靠的转换” 所以,在其他世界里,你说你需要练习你的 T -SQL 技能更频繁。当然,也许最初几次使用拖放更容易,但是在您学习了 T-SQL 之后,使用 SQL 完成它所花费的时间几乎一样长。【参考方案2】:

我一直在为数 TB 的 SQL Server 数据仓库使用存储过程 ETL。这个决定是在 2001 年 .NET 1.0 时做出的,因此 VB6 是替代编程语言,而 SSIS 还没有出现——它是 DTS。我可以告诉你,有优点也有缺点,就像任何事情一样。

一些注意事项:

    如果团队中的每个人都了解 SQL,那么很容易深入研究存储过程。 SQL 是一项广为人知的技能,如果您有很多 ETL 编写者/读者,这可能会有所帮助。您必须不仅仅是 SSIS 的普通用户,才能了解它在做什么。高级图形流程非常适合文档,但如果有人需要深入了解,他们最好熟悉 SSIS。 SQL 难以模块化。如果您使用 UDF,您将招致巨大的性能损失。你会在多个地方编写类似的代码,你会因为这样做而讨厌自己,但在 ETL 场景中,性能通常是王道。 SSIS 将帮助您模块化和分解您的任务。 不要期望能够轻松地将源代码控制与 SSIS 一起使用。 SQL - 没问题。 SSIS 使用糟糕的 XML 文件,可以签入,但祝你好运与以前的版本不同,看看发生了什么变化以及何时发生变化。 您需要以模块化的方式来考虑您的 SP,即使很难将它们按您希望的那样模块化。使用临时表来分块处理。在使用它们之前在这些临时表上放置索引。不要试图一次做太多。评论所有内容。 如果您使用游标,那么您做错了。不要害怕链接你用你选择的语言编写的一些外部控制台应用程序来执行 SQL 不适合做的一些事情。

顺便说一句 - 在我离开那家公司之后,他们终于将数据库从 SQL 2000 升级到 2008 并慢慢从存储过程转移到 SSIS。在我的新公司,我们拥有 SSIS,但在使用它之后,我们都同意我们自定义编写的 .NET ETL 更适合我们的目的。每个人都走自己的路。该决定必须平衡维护和性能以及您团队的技能组合和您所在地区工作池的技能组合。

【讨论】:

我正在从事我的第一份职业工作,正在处理存储过程和 ssis 的平衡问题。我正在经历这些考虑中的每一个。【参考方案3】:

我正在摆脱我们的 SSIS 包并使用存储过程。对我们来说,存储过程要好得多:

    它们更容易维护,我们不需要投标,不需要创建项目并将包导入投标,因此进行简单的存储过程更改的步骤要少得多。 我们当前所有的软件包基本上都会截断表中的数据,然后使用直接映射从同一服务器上的其他几个表中重新填充。非常容易插入/选择 SQL 来编写。 它们跑得更快。我们没有游标,没有循环结构,只有直接的 SQL。 我们不必花费所有时间右键单击并在小投标窗口中工作以尝试遵循逻辑流程。我们都知道基本的 TSQL,这足以完成我们的任务。

【讨论】:

【参考方案4】:

我会说这在一定程度上取决于你在做什么。但是,根据我的经验,SSIS 包的改进空间是巨大的。当我们采用一些重磅存储过程并将它们放入 SSIS 包中时,我们的数据仓库环境得到了 10 倍的改进。 SSIS 的内存利用率(无论如何,在这种情况下)发挥了重要作用。

我想重申,了解自己在做什么很重要。例如,当数据转换是在同一台服务器上进行表到表转换时,SQL 语句通常会优于 SSIS 数据流。

最好选择一两个 SP 并在 SSIS 中创建它们并测试它们。

似乎所有 SQL 问题的答案都以开头,这取决于...

【讨论】:

我同意这里 - 如果您的存储过程 ETL 花费的时间太长(即超过几分钟?),那么出于性能原因,您可能会考虑将 SSIS 作为替代方案。 :) 我很少发现 SSIS 的性能优于正确编写的存储过程。例如,SSIS 中无用的 SCD 组件需要 20 分钟才能完成在存储过程中可以在几秒钟内完成的事情。不过,有些人可能喜欢它的向导方面。【参考方案5】:

我已经看到使用 SSIS 带来了一些巨大的性能提升,如果您有使用链接服务器的存储过程尤其好,因为这会使用更多的处理能力,并且链接服务器倾向于在限制行之前将整个表拉入内存加入需要。我们有一个需要 7 个多小时才能运行的存储过程,我将其分解为来自每个服务器的数据,然后在 SSIS 中为每个数据源设置一个本地数据源,允许通过链接服务器对每个数据源进行本地处理,现在这项工作需要 6 分钟才能运行,我会说这是一个巨大的收获。

卡拉琳

【讨论】:

【参考方案6】:

我们正在使用组合方法来实现两全其美:

我们使用 SSIS 从外部来源获取数据并将其并行加载到暂存数据库中 然后我们使用 SSIS 包来编排管道并在控制流中触发适当的 SP。

任何转换逻辑都被封装到 SP 中,因为数据流难以管理/修改并且没有任何显着优势:

    SP 的修改和故障排除比包更容易 除了调用外部包之外,没有其他方法可以轻松重用 SSIS 中的组件 SP 的 SVN 差异有效,SSIS 包的差异很糟糕 :)

此外,我们使用 SSIS 并行运行 SP 以提高整体性能。

【讨论】:

【参考方案7】:

我没有看到任何明显的技术限制。对于复杂的 ETL 操作,存储过程可能比 SSIS 包更难遵循 - 但并非所有场景都如此。我还发现包(SSIS 和 DTS)更容易被识别为“作业”——由计划作业执行的存储过程经常被开发人员忽略,因为他们看不到计划作业。

也就是说,我已经看到由存储过程和 DTS/SSIS 包执行的 ETL,只要存储过程不是一大堆乱七八糟的代码,这似乎是合适的。我还没有看到一种方法比另一种方法执行得更好或更可靠(但是我还没有看到存储过程执行复杂的 ETL)。

【讨论】:

【参考方案8】:

我尝试了 SSIS 中的一些功能,但我对所有这些功能都不满意。 我对数据流进行了陈述,我对所看到的性能并不满意。 我最终做的是开发一个 SSIS 包,它有一个 sql 任务的控制流,每个任务都执行一个存储过程。

这确保了 SQL Server 完成了大部分 E、T 和 L。我认为当您使用数据流组件时,数据实际上从 sql server 移动到运行包的机器上,这使得它的效率不那么高。

话虽如此,如果我必须与 3rd 方应用程序/数据库/DW 系统交互,我想我会尝试优化 Dataflow 事物(自从我研究它以来已经有一段时间了)。

【讨论】:

【参考方案9】:

SSIS 缺少一些基本功能,它没有允许使用 SQL 语句进行开发以针对原始文本文件运行的 Informatica 类型包,并且 SQL Server 严重缺乏像 Oracle 这样的错误日志记录 DML。当微软宣布添加 Merge 声明时,我真的认为他们当然会实现错误桶,这是它最重要的功能之一,再猜一次。行级别的错误处理很重要,如果您使用 SQL 语句添加一批数据,如果一条记录失败,则回滚整个批次。

【讨论】:

【参考方案10】:

我从 6.5 版开始就一直在使用 SQL Server - 已经很长时间了!根据我的经验,大多数 ETL 都非常简单,以至于 T-SQL 工作得非常好,不仅工作得很好,而且工作得很好——快速、可靠、简单的结构化编程。我相信任何可以在 SSIS 中完成的事情都可以由知道自己在做什么的人在 T-SQL 中完成。

根据我的经验,大多数支持 SSIS 的人都是缺乏经验的开发人员,他们在图形工具的陪伴下长大,并不真正知道如何编程。

【讨论】:

【参考方案11】:

对于小型项目,如果你有扎实的 sql 技能,以及对业务需求的理解,那就去吧!

否则,如果您将面临复杂的数据提取、繁重的转换任务。 SSIS 或其他 ETL 工具就足够了。

干杯

【讨论】:

【参考方案12】:

对于 SQL 服务器之间的数据传输,请使用高于 SP 的 SSIS 如上所述,您可以轻松应对 10 倍的改进 通过将 SP 嵌入到 SSIS 包中,我们将 6-7 小时的传输时间缩短到了更易于管理的时间范围

附带说明:SSIS 基本上是一堆 XML 文件,可以以不同的方式操作/使用(例如用于文档)

【讨论】:

【参考方案13】:

    性能将比普通 sp 更快。不需要为检索数据创建复杂的临时表、游标、索引。

    数据清洗是 SSIS 的优势。

    只能在 ssis 中进行增量处理。

    我们可以创建包配置文件并将其部署到任何服务器。用户可以提供服务器详细信息和登录信息。

    图形用户界面。

    日志记录、错误处理最好在 ssis 中。

【讨论】:

我不同意所有这些观点。是什么让您认为您只能在 SSIS 中进行增量加载? 我是说只有当你没有扎实的 SQL 技能时,#1 才是正确的。 #2 在很多情况下都是正确的,但不是全部。 #3根本不准确。 #4 具有误导性; MS 的 SQLPackage 可以从 TSQL 部署中使用。 #5。对新手有利,但我认为这会阻碍高级用户的工作效率。 #6 错误处理在 SSIS 中可以更加灵活,但是如果你知道你在做什么,你可以在 TSQL 中充分记录。我认为 TSQL 中的故障排除要容易得多。

以上是关于使用 SSIS 包优于存储过程的优势? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 application/json 优于 text/plain 的优势? [关闭]

从不同帐户下的存储过程调用 SSIS 包

sql 这将使用存储过程运行SSIS包。

有没有办法在每个 SSIS 包之前和之后启动存储过程?

每晚数据库还原 - SSIS 包 - SQL Server 2005

您如何通过和 SSMS 存储过程调用和 SSIS 包?