SSIS最佳实践 - 做1的2周的事情(SSIS Best Practice - Do 1 of 2

2019-10-17 22:27发布

I have a SSIS package that is processing a queue. I currently have a singel package that is broken into 3 containers 1. gather some meta data 2. do the work 3. re-examine meta data, update the queue w/ what we think happened (success of flavor of failure )

I am not super happy with the speed, part of it is that I am running on a hamster powered server, but that is out of my control.

The middle piece may offer an opportunity for an improvement... There are 20 tables that may need to be updated. Each queue item will update 1 table. I currently have a sequence that contains 20 sequence containers.

They all do essentially the same thing, but I couldnt figure out a way to abstract them.

The first box in each is an empty script action. There is a conditional flow to 'the guts' if there is a match on tablename.

So I open up 20 sequence tasks, 20 empty script tasks and do 20 T/F checks.

Watching the yellow/green light show, this seems to be slow.

Is there a more efficient way? The only way I can think to make it better is to have the 20 empty scripts outside the sequence containers. What that would save is opening the container. I cant believe that is all that expensive to open a sequence container. Does it possibly reverify every task in the container every time?

Just fishing, if anyone has any thoughts I would be very happy to hear them.

Thanks

Greg

Answer 1:

你的主要问题,现在的问题是,你是在BIDS运行此。 这样设计是为了让开发和包装方便的调试,所以是你点它验证所有的对象,因为它运行。 另外,“黄/绿色灯光秀”是更多的开销来告诉你什么是在包发生的,因为它运行。 当你DTSExec或从SQL Server计划任务的一部分运行它,你将得到更好的性能。 你记录你的包? 如果是这样,从服务器上运行,并查看日志,以验证过程实际上花费的时间在服务器上。 如果它仍然太长,在这一点上,那么你就可以实现一些@registered用户的想法。



Answer 2:

你运行的每个并行的任务是什么? 如果通过所有60个对象具有周期顺序,那么你需要改进的主要房间每个正在运行的这些并行。 如果你正试图并行的过程,那么你可以做一些解决方案:

  1. 创建所有60个对象,3个对象的每一个链。 这是劳动密集的设置,但它是最容易解决,并允许您在必要时对其进行自定义。 显然,这并不抽象掉的东西!

  2. 创建父包和子包。 子包将包含要执行什么样的结构。 父包包含20个执行包任务。 这类似于1,但它的优点是,你只有一组代码,以维持3任务序列容器。 这可能意味着你将移动到表驱动的元数据模型。 这种运作良好,在SSIS与CozyRoc数据流加任务,如果你是从一台服务器转移到另一个数据。 如果你是做在同一服务器上的一切,那么你真的可能组织正在存储过程执行这将是很容易与这个模型做。

  3. 创建使用CozyRoc并行任务和数据流加上一包。 这可以让你封装了所有的逻辑在一个包和并行执行所有的人。 警告我试图在SQL Server 2008 R2这种方法取得了巨大成功。 但是,SQL Server 2012发布时,该CozyRoc并行任务并没有它在以前的版本我做了的行为方式,由于一些下SSIS的覆盖变化。 我登录这与CozyRoc一个错误,但作为最好的,我知道这个问题一直没有得到解决(截至2013年4月1日)。 此外,该模型可以抽象掉了太多的ETL和进行初始负载和故障排除在未来的各个表的负载更加困难。

就个人而言,我使用的解决方案1,因为我的任何队员可以成功实现这一代码。 元数据驱动的解决方案是性感的,但更难正确编码。



Answer 3:

我可以建议包裹在一个存储过程的20次更新。 不知道你的输入数据如何变量是,我不知道如何适合这个,但是这是我的第一反应。



Answer 4:

好 - 这里是我做过什么....

我在父序列容器的“顶部”增加了一个虚工。 从我加20个流通环节,以每个子序列容器(CSC)的。 现在每个CSC被打开只有在必要的。

我可以通过约30%( - 上采样最小> 34的转速26转)确实增加。

我可以去瓦特/或者zmans接听或registeredUsers。 两人都是有帮助的。 我选择zmans因为真正的答案总是在看日志看到的东西究竟需要多久才能开始(绿色/黄色是不是真实可靠的在我的经验)。

谢谢



文章来源: SSIS Best Practice - Do 1 of 2 dozen things
标签: ssis