Como determino se uma transformação do SSIS não está bloqueando, bloqueando parcialmente ou totalmente?

12

Existem vários blogs que afirmam categorizar as transformações do SSIS em bloqueio (assíncrono), não bloqueador (síncrono) e parcialmente bloqueado (assíncrono).

Ao analisar a questão específica: o multicast é síncrono (sem bloqueio) ou assíncrono (parcialmente bloqueado)?

Um recurso afirma assíncrono: "A multicast é uma transformação assíncrona (também conhecida como parcialmente bloqueando)" fonte: http://social.technet.microsoft.com/wiki/contents/articles/7392.ssis-multicast-transformation.aspx

e outro síncrono: https://jorgklein.com/2009/04/14/ssis-lookup-is-case-sensitive/

Outros recursos afirmam que a conversão de Limpeza do DQS é uma transformação sem bloqueio, mas parece -me estar parcialmente bloqueando.

Por favor, não responda com um link para uma lista de transformações categorizadas por tipo. Esperamos que a resposta a esta pergunta permita que um método mais rigoroso PROVE uma resposta correta.

Como as transformações parcialmente bloqueadas e bloqueadas moverão os dados para novos buffers, em vez dos não-bloqueadores que operam no buffer no local, suspeito que a solução seja observar a criação do buffer durante a execução da transformação, mas não tenho certeza (a ) se isso produzirá a resposta definitiva e (b) como fazer isso.

Acredito que uma transformação sem bloqueio não fará com que uma nova árvore de execução seja iniciada; portanto, é possível que a resposta esteja no log do PipelineExectionTrees e PipelineExecutionPlan. Isso pode diferenciar entre síncrono e assíncrono, mas não pode diferenciar entre parcialmente bloqueado e totalmente bloqueado.

Thronk
fonte
3
O Mulitcast é síncrono. O teste rápido do sniff para sincronização versus async é se o lineageid (antes de 2012) permanece o mesmo antes e depois de uma transformação. Deixe-me olhar para 2012 e como isso funciona agora.
billinkc
2
Bloquear comportamento e sincronicidade não são a mesma coisa. Sincronicidade é sobre se os dados precisam ser movidos para um novo buffer ou não, enquanto o bloqueio é sobre se cada linha pode ser tratada imediatamente ou não. Por exemplo, o Union All não é bloqueador, mas assíncrono - ele cria um novo buffer e um novo encadeamento de execução, mas não precisa esperar para fazer isso.
22814 Rob Robleyley
@ Rob - enquanto eu concordo que eles não são a mesma coisa (assíncrona pode parcialmente ou totalmente bloquear) - O blog jorg_klein realmente afirma que o Union All está parcialmente bloqueando. Estou inclinado a concordar como se os dados fossem movidos para o novo buffer, a intuição me leva a pensar que isso seria parcialmente bloqueado. Se ele se provar errado e minha intuição estiver incorreta, tanto melhor quanto isso responderia à pergunta!
Thronk
Alguém tem alguma idéia de como isso pode ser testado? Acho que os logs de desempenho ou informativos podem ser usados ​​para descobrir isso com certeza, mas não sei exatamente qual.
precisa saber é o seguinte
1
Para aqueles que desejam testar, esta dica

Respostas:

4

Uma operação que está bloqueando deve esperar até que todas as linhas sejam vistas e manipuladas antes de poder começar a preencher buffers.

Uma operação que bloqueia parcialmente grava dados em novos buffers, que são gerenciados apenas pela próxima operação depois que cada buffer (normalmente, com menos de 10.000 linhas) é preenchido.

Uma operação sem bloqueio pode ter a operação subseqüente trabalhando no mesmo buffer, pois cada linha é manipulada.

Mas muitos textos se referem a 'parcialmente bloqueando' como 'sem bloqueio', pois o comportamento está muito mais próximo de 'sem bloqueio' do que 'bloqueio'.

Você deve saber o que está acontecendo, observando o fluxo de dados sendo executado e ver quando os números estão aumentando a cada ponto.

Rob Farley
fonte