如何确定SSIS转换是非阻塞,部分阻塞还是完全阻塞?


12

有几篇博客声称将SSIS转换分为阻塞(异步),非阻塞(同步)和部分阻塞(异步)。

在研究特定问题时:多播是同步的(非阻塞)还是异步的(部分阻塞)?

一种资源声称异步:“多播是异步(也称为部分阻止)转换” 源:http : //social.technet.microsoft.com/wiki/contents/articles/7392.ssis-multicast-transformation.aspx

另一个同步:https ://jorgklein.com/2009/04/14/ssis-lookup-is-case-sensitive/

其他资源声称DQS清理转换是非阻塞转换,但在我看来,它是部分阻塞的。

请不要回答按类型分类的转换列表的链接。希望该问题的答案能够提供更严格的方法来证明正确的答案。

由于部分阻塞和阻塞转换会将数据移动到新的缓冲区,而不是在适当的缓冲区上进行非阻塞操作,因此我怀疑解决方案将是在转换执行期间监视缓冲区的创建,但我不确定(a )是否会产生明确的答案,以及(b)怎么做。

我相信无阻塞转换不会导致新的执行树开始,因此答案可能在于记录PipelineExectionTrees和PipelineExecutionPlan。这可以区分同步和异步,但不能区分部分阻塞和完全阻塞。


3
多播是同步的。同步与异步的快速嗅探测试是,在转换之前和之后,lineageid(2012年之前)是否保持相同。让我看看2012年以及现在如何运作。
billinkc 2014年

2
阻塞行为和同步性不是一回事。同步是关于是否需要将数据移到新缓冲区中,而阻塞是关于是否可以立即处理每一行。例如,Union All是非阻塞的,但是是异步的-它创建了一个新的缓冲区和一个新的执行线程,但不需要等待这样做。
罗布·法利

@Rob-虽然我同意它们不是同一件事(异步可以部分或完全阻止)-jorg_klein博客实际上声明Union All在部分阻止。我倾向于同意,好像数据已移到新缓冲区中一样,直觉使我认为这会部分阻塞。如果可以证明他是错的,而我的直觉是不正确的,那将更好地回答这个问题!
Thronk 2014年

有人对如何测试有任何想法吗?我猜性能或信息日志可以肯定地发现这一点,但我不确定那是什么。
Nick.McDermaid 2014年

1
对于那些可能想要测试的人,此技巧将遍历

Answers:


4

被阻塞的操作必须等到所有行都被查看和处理后才能开始填充缓冲区。

部分阻塞的操作会将数据写入新缓冲区,只有在每个缓冲区(通常不足10,000行)被填充后,下一个操作才会处理该数据。

当处理每一行时,非阻塞操作可以使后续操作在同一缓冲区上进行。

但是许多文本将“部分阻止”称为“非阻止”,因为其行为比“阻止”更接近“非阻止”。

您应该能够通过观察数据流运行并观察数字在每个点何时在增加而知道发生了什么。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.