¿Cómo determino si una transformación SSIS no es bloqueante, parcialmente bloqueante o totalmente bloqueante?


12

Hay varios blogs que afirman clasificar las transformaciones SSIS en bloqueadas (asíncronas), no bloqueadas (síncronas) y parcialmente bloqueadas (asíncronas).

Al analizar la pregunta específica: ¿La multidifusión es síncrona (sin bloqueo) o asíncrona (parcialmente bloqueada)?

Un recurso afirma asíncrono: "La Multidifusión es una transformación asincrónica (también conocida como bloqueo parcial)" : http://social.technet.microsoft.com/wiki/contents/articles/7392.ssis-multicast-transformation.aspx

y otro sincrónico: https://jorgklein.com/2009/04/14/ssis-lookup-is-case-sensitive/

Otros recursos afirman que la transformación de limpieza DQS es una transformación sin bloqueo, pero me parece que está bloqueando parcialmente.

No responda con un enlace a una lista de transformaciones clasificadas por tipo. Con suerte, la respuesta a esta pregunta permitirá un método más riguroso para PROBAR una respuesta correcta.

Como las transformaciones de bloqueo y bloqueo parcial moverán los datos a nuevos buffers en lugar de los no bloqueadores que operan en el buffer en su lugar, sospecho que la solución será observar la creación del buffer durante la ejecución de la transformación, pero no estoy seguro (a ) si esto producirá la respuesta definitiva y (b) cómo hacerlo.

Creo que una transformación sin bloqueo no hará que comience un nuevo árbol de ejecución, por lo que es posible que la respuesta se encuentre en el registro de PipelineExectionTrees y PipelineExecutionPlan. Esto puede diferenciar entre síncrono y asíncrono, pero no puede diferenciar entre bloqueo parcial y bloqueo total.


3
Mulitcast es sincrónico. La prueba de olfateo rápido para sincronización vs asíncrono es si el lineageid (anterior a 2012) permanece igual antes y después de una transformación. Déjame ver el 2012 y cómo funciona ahora
billinkc

2
El comportamiento de bloqueo y la sincronicidad no son lo mismo. La sincronicidad se trata de si los datos se deben mover a un nuevo búfer o no, mientras que el bloqueo se trata de si cada fila se puede manejar de inmediato o no. Por ejemplo, Union All no bloquea, pero es asíncrono: crea un nuevo búfer y un nuevo hilo de ejecución, pero no necesita esperar para hacerlo.
Rob Farley

@Rob - aunque estoy de acuerdo en que no son lo mismo (asíncrono puede bloquear parcial o totalmente) - El blog jorg_klein en realidad afirma que Union All está bloqueando parcialmente. Me inclino a aceptar que si los datos se trasladan al nuevo búfer, la intuición me lleva a pensar que eso se bloquearía parcialmente. Si se puede demostrar que está equivocado y mi intuición es incorrecta, ¡tanto mejor como eso respondería la pregunta!
Thronk

¿Alguien tiene alguna idea sobre cómo se podría probar esto? Supongo que el rendimiento o los registros informativos podrían usarse para descubrir esto con seguridad, pero no estoy exactamente seguro de cuál.
Nick.McDermaid

Respuestas:


4

Una operación que está bloqueando debe esperar hasta que se hayan visto y manejado todas las filas antes de que pueda comenzar a llenar los buffers.

Una operación que bloquea parcialmente escribe datos en nuevos buffers, que solo son manejados por la siguiente operación una vez que se rellena cada buffer (generalmente menos de 10,000 filas).

Una operación que no es de bloqueo puede hacer que la operación posterior funcione en el mismo búfer, ya que se maneja cada fila.

Pero muchos textos se referirán a 'parcialmente bloqueado' como 'no bloqueante', ya que el comportamiento está mucho más cerca de 'no bloquear' que 'bloquear'.

Debería poder saber qué está sucediendo observando el flujo de datos y ver cuándo aumentan los números en cada punto.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.