Solucionar problemas de rendimiento de los paquetes
Actualizado: 15 de septiembre de 2007
Integration Services incluye varias características y herramientas que puede utilizar para solucionar problemas de rendimiento de los paquetes. Por ejemplo, el registro captura información de los paquetes en tiempo de ejecución y los contadores de rendimiento permiten supervisar el motor de flujo de datos. En este tema se proporciona información sobre estas características, junto con sugerencias para diseñar paquetes para evitar problemas de rendimiento comunes.
Diseña el flujo de datos para mejorar el rendimiento
Se pueden solucionar problemas de rendimiento de los flujos de datos de paquetes poniendo en práctica las siguientes sugerencias en el paquete y probando sus resultados:
Optimizar las consultas
Varios componentes de flujo de datos utilizan consultas, ya sea al extraer datos de orígenes o en operaciones de búsqueda para crear tablas de referencia. La consulta predeterminada utiliza la sintaxis SELECT * FROM <nombreDeTabla>. Este tipo de consulta devuelve todas las columnas de la tabla de origen. Disponer de todas las columnas en tiempo de diseño permite elegir cualquier columna como columna de búsqueda, de paso o de origen. Sin embargo, después de elegir las columnas que desee utilizar, debe revisar que la consulta incluya únicamente las columnas que se utilizan. Puede escribir la consulta o utilizar el Generador de consultas para crearla. Quitar las columnas superfluas aumenta la eficacia del flujo de datos en un paquete, ya que mientras más pequeña sea una fila, más filas cabrán en un búfer y menos trabajo costará procesar todas las filas del conjunto de datos.
[!NOTA] Al ejecutar un paquete en Business Intelligence Development Studio, la ficha Progreso del Diseñador SSIS muestra las advertencias, incluida una advertencia para cada columna de datos que un origen ponga a disposición del flujo de datos pero que, posteriormente, los componentes del nivel inferior del flujo de datos no utilicen. Se puede utilizar la propiedad RunInOptimizedMode para eliminar esas columnas automáticamente.
Configurar las propiedades de la tarea Flujo de datos
Puede configurar las siguientes propiedades de la tarea Flujo de datos; todas ellas influyen en el rendimiento:
Especifique las ubicaciones para el almacenamiento temporal de datos del búfer (propiedad BufferTempStoragePath) y de columnas que contengan datos de objetos binarios grandes (BLOB) (propiedad BLOBTempStoragePath). De manera predeterminada, se asigna a esta propiedad el valor de la variable de entorno TEMP. Es posible que se quieran especificar otras carpetas para colocar los archivos temporales en otra unidad de disco duro o para distribuirlos entre varias unidades. Puede especificar varios directorios delimitando los nombres de los directorios con punto y coma.
Defina el tamaño predeterminado del búfer que utiliza la tarea asignando un valor a la propiedad DefaultBufferSize y establezca la cantidad máxima de filas de cada búfer asignando un valor a la propiedad DefaultBufferMaxRows. El tamaño de búfer predeterminado es 10 megabytes, con un tamaño de búfer máximo de 100 megabytes. La cantidad máxima de filas es 10.000.
Establezca el número de subprocesos que la tarea puede usar durante la ejecución asignando un valor a la propiedad EngineThreads. Esta propiedad le sugiere al motor de flujo de datos cuántos subprocesos utilizar. El valor predeterminado es 5, y el valor mínimo es 2. Sin embargo, el motor no utilizará más subprocesos que los necesarios, independientemente del valor asignado a esta propiedad. También puede suceder que el motor utilice más subprocesos que los especificados en esta propiedad si así fuera necesario para evitar problemas de simultaneidad.
Indique si la tarea Flujo de datos se ejecuta en el modo optimizado (propiedad RunInOptimizedMode). El modo optimizado mejora el rendimiento quitando del flujo de datos las columnas, salidas y componentes que no se utilizan.
[!NOTA] Una propiedad con el mismo nombre, RunInOptimizedMode, se puede establecer en el nivel de proyecto en Business Intelligence Development Studio para indicar que la tarea Flujo de datos se ejecuta en el modo optimizado durante la depuración. Esta propiedad del proyecto reemplaza la propiedad RunInOptimizedMode de las tareas Flujo de datos en tiempo de diseño.
Descripción del modo en que la tarea Flujo de datos calcula el tamaño de los búferes
El motor de flujo de datos comienza la tarea de ajustar el tamaño de sus búferes calculando el tamaño estimado de una fila de datos. Luego multiplica el tamaño estimado de una fila por el valor de DefaultBufferMaxRows para obtener un valor de trabajo preliminar para el tamaño de los búferes.
- Si el resultado es superior al valor de DefaultBufferSize, el motor reduce la cantidad de filas.
- Si el resultado es inferior al tamaño de búfer mínimo calculado internamente, el motor aumenta el número de filas.
- Si el resultado se encuentra entre el tamaño de búfer mínimo y el valor de DefaultBufferSize, el motor ajusta el tamaño del búfer con la mayor proximidad posible al tamaño estimado de una fila multiplicado por el valor de DefaultBufferMaxRows.
Ajustar el cálculo del tamaño de los búferes
Al comenzar a probar el rendimiento de las tareas de flujo de datos, utilice los valores predeterminados de DefaultBufferSize y DefaultBufferMaxRows. Habilite el registro de la tarea de flujo de datos y seleccione el evento BufferSizeTuning para ver cuántas filas contiene cada búfer.
Antes de empezar a ajustar el tamaño de los búferes, la mejora más importante que se puede hacer consiste en reducir el tamaño de cada fila quitando las columnas innecesarias y configurando los tipos de datos de manera adecuada.
Cuando haya suficiente memoria disponible, deberá usar una menor cantidad de búferes grandes, en lugar de una mayor cantidad de búferes pequeños. Es decir, se puede mejorar el rendimiento reduciendo el número total de búferes necesarios para contener los datos, e incluyendo en un búfer tantas filas de datos como sea posible. Para determinar la cantidad óptima de búferes y sus tamaños, realice pruebas con los valores de DefaultBufferSize y DefaultBufferMaxRows mientras supervisa el rendimiento y la información que proporciona el evento BufferSizeTuning.
[!NOTA] Las propiedades de las tareas de flujo de datos que se analizaron en esta sección deben establecerse por separado para cada tarea de flujo de datos de un paquete.
Evitar ordenaciones innecesarias
La ordenación es una operación inherentemente lenta, y evitar la ordenación innecesaria puede mejorar el rendimiento del flujo de datos del paquete.
Si los datos de origen están ordenados, ya sea porque la consulta SELECT utiliza una cláusula ORDER BY o porque se han insertado los datos en el origen de manera ordenada, puede proporcionar una sugerencia de que los datos están ordenados y omitir el uso de una transformación Ordenar para satisfacer los requisitos de ordenación de ciertas transformaciones de nivel inferior. Por ejemplo, las transformaciones Mezclar y Combinación de mezcla requieren entradas ordenadas. Para proporcionar una sugerencia, debe establecer la propiedad IsSorted de la salida del componente de flujo de datos de nivel superior en True y especificar las columnas de criterio de ordenación en las que los datos están ordenados. Para obtener más información, vea Cómo establecer atributos de ordenación en una salida.
Si es necesario ordenar los datos en el flujo de datos, puede mejorar el rendimiento diseñando el flujo de datos de forma que utilice el menor número posible de operaciones de ordenación. Por ejemplo, si el flujo de datos utiliza una transformación Multidifusión para copiar el conjunto de datos, puede ordenar el conjunto de datos una vez antes de ejecutar la transformación Multidifusión, en lugar de ordenar múltiples salidas después de la transformación.
Para obtener más información, vea Transformación Ordenar, Transformación Mezclar, Transformación Combinación de mezcla y Transformación Multidifusión.
Optimizar la transformación Dimensión de variación lenta
El Asistente para dimensiones de variación lenta y la transformación Dimensión de variación lenta son unas herramientas de uso general que cubren las necesidades de la mayoría de los usuarios. Sin embargo, el flujo de datos generado por el asistente no está optimizado para un rendimiento adecuado.
Normalmente, en la transformación Dimensión de variación lenta, los componentes más lentos son las transformaciones Comando de OLE DB que realizan operaciones UPDATE con una fila única a la vez. Casi siempre es posible mejorar el rendimiento de la transformación Dimensión de variación lenta si se reemplazan las transformaciones Comando de OLE DB con los componentes de destino. Estos componentes de destino guardan todas las filas que se van a actualizar en una tabla provisional. A continuación, podrá agregar una tarea Ejecutar SQL que realiza un único UPDATE Transact-SQL basado en conjunto con todas las filas simultáneamente.
Los usuarios avanzados pueden diseñar un flujo de datos personalizado para el procesamiento de la dimensión de variación lenta que está optimizada para las dimensiones grandes. Para obtener más información y un ejemplo de este método, vea la sección relativa al escenario de dimensión único, en las notas del producto de Microsoft Project REAL: Business Intelligence ETL Design Practices.
Optimizar las agregaciones en la transformación Agregado
La transformación Agregado incluye varias propiedades que puede utilizar para mejorar su rendimiento. Si conoce el número exacto o aproximado de valores de clave en el conjunto de datos, puede establecer las propiedades Keys y KeysScale. También puede especificar el número exacto y aproximado de claves que se espera que controle la transformación para una operación COUNT DISTINCT, estableciendo las propiedades CountDistinctKeys y CountDistinctScale. Mediante el uso de estas propiedades, la transformación evita reorganizar los totales en caché y mejora el rendimiento.
Si necesita crear varias agregaciones en un flujo de datos, debe considerar la posibilidad de crear varias agregaciones usando una sola transformación Agregado, en lugar de crear varias transformaciones. Esto mejora el rendimiento especialmente cuando las agregaciones son subconjuntos de otras agregaciones, ya que la transformación puede optimizar el almacenamiento interno y explorar los datos entrantes una sola vez. Por ejemplo, si una agregación utiliza una cláusula GROUP BY y una agregación AVG, puede mejorar el rendimiento combinándolas en una transformación. No obstante, sólo debe considerar esta posibilidad si hay restricciones de memoria, ya que realizar varias agregaciones en una transformación Agregado serializa las operaciones de agregación.
Para obtener más información, vea Transformación Agregado.
Configurar la reducción de búferes en la transformación Combinación de mezcla
La transformación Combinación de mezcla incluye la propiedad MaxBuffersPerInput, que especifica el número máximo de búferes que pueden estar activos al mismo tiempo para cada entrada. Puede utilizar esta propiedad para optimizar la cantidad de memoria que consumen los búferes y, en consecuencia, el rendimiento de la transformación. Un mayor número de búferes da como resultado una mayor cantidad de memoria utilizada por la transformación y un mejor rendimiento. El valor predeterminado de MaxBuffersPerInput es 5, que es el número de búferes que mejor funciona en la mayoría de los escenarios. Para optimizar el rendimiento, conviene utilizar un número ligeramente diferente de búferes, como 4 o 6. Si es posible, debería evitar utilizar un número de búferes demasiado pequeño. Por ejemplo, el establecimiento de MaxBuffersPerInput en 1 en lugar de 5 tiene un impacto considerable en el rendimiento. Además, no debe establecer MaxBuffersPerInput en 0. Este valor significa que no se produce ninguna reducción y, en función de la carga de datos y la cantidad de memoria disponible, es posible que el paquete no se complete.
Para evitar un interbloqueo, la transformación Combinación de mezcla puede incrementar temporalmente el número de búferes que utiliza por encima del valor de MaxBuffersPerInput. Una vez que se resuelve la situación de interbloqueo, MaxBuffersPerInput regresa a su valor configurado.
Para obtener más información, vea Transformación Combinación de mezcla.
Probar el rendimiento de los destinos
Es posible que guardar datos en los destinos lleve más tiempo del esperado. Para identificar si esto se debe a que el destino no es capaz de procesar los datos con suficiente rapidez, puede sustituir el destino por una transformación Recuento de filas temporalmente. Si el rendimiento mejora de forma significativa, es probable que el destino que carga los datos sea la causa de la tardanza. Para obtener más información, vea Transformación Recuento de filas.
Supervisar el rendimiento del paquete
Integration Services incluye herramientas y características que se pueden utilizar para supervisar el rendimiento de un paquete. Aproveche las siguientes sugerencias para determinar qué partes del paquete afectan en mayor medida al rendimiento.
Revisar la información de la ficha Progreso
El Diseñador SSIS proporciona información sobre el flujo de control y sobre el flujo de datos al ejecutar un paquete en Business Intelligence Development Studio. En la ficha Progreso se muestran las tareas y los contenedores en orden de ejecución; incluye las horas de inicio y finalización, las advertencias y los mensajes de error de cada tarea y contenedor, incluido el paquete en sí. También se muestran los componentes de flujo de datos en el orden de ejecución, y se incluye información sobre su progreso, mostrado como porcentaje finalizado, y el número de filas procesadas.
Configurar el registro en el paquete
Integration Services incluye varios proveedores de registro que permiten a los paquetes registrar información en tiempo de ejecución en diferentes tipos de archivos o en SQL Server. Puede habilitar entradas del registro para los paquetes y objetos de paquete individuales, como las tareas y los contenedores. Integration Services incluye una amplia variedad de tareas y contenedores, y cada uno de ellos tiene su propio conjunto de entradas descriptivas del registro. Por ejemplo, un paquete que incluya una tarea Ejecutar SQL puede escribir una entrada del registro que muestre la instrucción SQL ejecutada por la tarea, incluidos los valores de los parámetros para la instrucción.
Las entradas del registro incluyen información, como la hora de inicio y fin de los paquetes y objetos de paquete, que permite identificar las tareas y contenedores que se ejecutan lentamente. Para obtener más información, vea Registrar la ejecución de paquetes, Implementar inicios de sesión en paquetes y Mensajes personalizados para registro.
Configurar el registro para las tareas Flujo de datos
La tarea Flujo de datos proporciona varias entradas del registro personalizadas que pueden utilizarse para supervisar y ajustar el rendimiento. Por ejemplo, puede supervisar componentes que puedan causar pérdidas de memoria o realizar un seguimiento del tiempo que lleva ejecutar un componente determinado. Para obtener una lista de las entradas del registro personalizadas y ejemplos de la salida del registro, vea Tarea Flujo de datos.
Supervisar el rendimiento del motor de flujo de datos
Integration Services incluye un conjunto de contadores de rendimiento para supervisar el rendimiento del motor de flujo de datos. Por ejemplo, puede realizar un seguimiento de la cantidad total de memoria, en bytes, que utilizan todos los búferes y comprobar si la memoria de los componentes es insuficiente. Un búfer es un bloque de memoria que un componente utiliza para almacenar datos. Para obtener más información, vea Supervisar el rendimiento del motor de flujo de datos.
Vea también
Tareas
Solucionar problemas de desarrollo de los paquetes
Conceptos
Solucionar problemas de ejecución de paquetes
Solucionar problemas del servicio Integration Services
Ayuda e información
Obtener ayuda sobre SQL Server 2005
Historial de cambios
Versión | Historial |
---|---|
15 de septiembre de 2007 |
|
17 de julio de 2006 |
|
5 de diciembre de 2005 |
|