Wie stelle ich fest, ob eine SSIS-Transformation nicht blockiert, teilweise blockiert oder vollständig blockiert ist?

12

Es gibt mehrere Blogs, die behaupten, SSIS-Transformationen in blockierende (asynchrone), nicht blockierende (synchrone) und teilweise blockierende (asynchrone) zu kategorisieren.

Bei der Untersuchung der spezifischen Frage: Ist Multicast synchron (nicht blockierend) oder asynchron (teilweise blockierend)?

Eine Ressource behauptet asynchron: "Der Multicast ist eine asynchrone (auch als teilweise blockierende) Transformation bekannte) Quelle: http://social.technet.microsoft.com/wiki/contents/articles/7392.ssis-multicast-transformation.aspx

und eine weitere syncrone: https://jorgklein.com/2009/04/14/ssis-lookup-is-case-sensitive/

Andere Quellen behaupten, dass die DQS-Bereinigungstransformation eine nicht blockierende Transformation ist, aber sie scheint mir teilweise blockierend zu sein.

Bitte antworten Sie nicht mit einem Link zu einer Liste von Transformationen, die nach Typ kategorisiert sind. Die Antwort auf diese Frage wird hoffentlich eine strengere Methode ermöglichen, um eine korrekte Antwort zu liefern.

Da die teilweise blockierenden und blockierenden Transformationen Daten in neue Puffer verschieben, im Gegensatz zu den nicht blockierenden, die den vorhandenen Puffer bearbeiten, gehe ich davon aus, dass die Lösung darin besteht, die Puffererstellung während der Transformationsausführung zu überwachen, bin mir jedoch unsicher (a ) ob dies die endgültige Antwort ergibt und (b) wie dies zu tun ist.

Ich glaube, dass eine nicht blockierende Transformation nicht dazu führt, dass ein neuer Ausführungsbaum beginnt. Daher liegt die Antwort möglicherweise in der Protokollierung der PipelineExectionTrees und PipelineExecutionPlan. Dies kann zwischen synchron und asynchron unterscheiden, kann jedoch nicht zwischen teilweisem und vollständigem Blockieren unterscheiden.

Thronk
quelle
3
Mulitcast ist synchron. Der schnelle Schnüffeltest für Synchronisierung und Asynchronisierung besteht darin, ob die Lineageid (vor 2012) vor und nach einer Transformation gleich bleibt. Lassen Sie mich einen Blick auf 2012 werfen und wie das jetzt funktioniert.
Billinkc
2
Sperrverhalten und Synchronität sind nicht dasselbe. Bei der Synchronität geht es darum, ob die Daten in einen neuen Puffer verschoben werden müssen oder nicht, während es beim Blockieren darum geht, ob jede Zeile sofort verarbeitet werden kann oder nicht. Beispielsweise ist Union All nicht blockierend, sondern asynchron - es erstellt einen neuen Puffer und einen neuen Ausführungsthread, muss jedoch nicht warten, um dies zu tun.
Rob Farley
@Rob - obwohl ich damit einverstanden bin, dass sie nicht dasselbe sind (asynchron kann teilweise oder vollständig blockieren) - Der Blog von jorg_klein gibt tatsächlich an, dass Union All teilweise blockiert. Ich bin geneigt zuzustimmen, als ob die Daten in den neuen Puffer verschoben würden. Die Intuition veranlasst mich zu der Annahme, dass dies teilweise blockieren würde. Wenn er sich als falsch erweisen kann und meine Intuition falsch ist, umso besser, als dies die Frage beantworten würde!
Thronk
Hat jemand eine Idee, wie dies getestet werden könnte? Ich denke, dass Performance- oder Informationsprotokolle verwendet werden könnten, um dies sicher herauszufinden, aber ich bin nicht genau sicher, welche.
Nick.McDermaid
1
Für diejenigen, die testen möchten, geht

Antworten:

4

Eine blockierende Operation muss warten, bis alle Zeilen gesehen und verarbeitet wurden, bevor sie mit dem Auffüllen von Puffern beginnen kann.

Teilweise blockierende Vorgänge schreiben Daten in neue Puffer, die erst beim nächsten Vorgang verarbeitet werden, wenn jeder Puffer (in der Regel knapp unter 10.000 Zeilen) gefüllt ist.

Bei einer nicht blockierenden Operation kann die nachfolgende Operation denselben Puffer bearbeiten, da jede Zeile verarbeitet wird.

In vielen Texten wird "teilweise blockieren" jedoch als "nicht blockieren" bezeichnet, da das Verhalten viel näher an "nicht blockieren" liegt als an "blockieren".

Sie sollten in der Lage sein zu erkennen, was los ist, indem Sie den Datenfluss beobachten und sehen, wann die Zahlen an jedem Punkt ansteigen.

Rob Farley
quelle