SQL Server Integration Services (SSIS) 10 Quick Best Practices

1.      La característica más deseada en el desarrollo de paquetes SSIS es la reusabilidad. En otros aspectos, podemos llamarles como los paquetes estándar que pueden ser reutilizados durante el desarrollo de diferentes componentes ETL. En SSIS, esto puede fácilmente lograrse mediante características de template. SSIS template packages son paquetes reutilizables que se pueden usar en cualquier proyecto SSIS en cualquier número de veces.

Nota: Por default  son almacenados en:

Drive:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\ProjectItems\DataTransformationProject\DataTransformationItems

2.      Evite utilizar el punto (.) en la Convención de nomenclatura para sus nombres de paquete. El Punto (.) en la  Convención de la nomenclatura  a veces se confunde con el Convenio de  nombres de objeto de SQL Server y por lo tanto debe evitarse. Buen enfoque sería utilizar subrayado (_) en lugar de utilizar el punto. También asegúrese de que los nombres de paquete no debe exceder  más de 100 caracteres. Durante la implementación del paquete en SQL Server, es notificado que  cualquier carácter más de 100 es eliminado automáticamente del nombre del paquete. Esto podría resultar que el paquete SSIS falle durante el tiempo de ejecución, especialmente cuando se utiliza “Execute Package Tasks” en el paquete.

3.      El flujo de datos desde upstream a downstream en un paquete es una tarea intensiva de memoria, en la mayoría de los pasos y nivel de componente tenemos que  comprobar cuidadosamente y estar seguros de que las columnas innecesarias no sean pasadas al downstream. Esto ayuda a evitar la sobrecarga de tiempo de ejecución adicional del paquete y a su vez mejora el rendimiento general de la ejecución del paquete.

4.      Al configurar cualquier administrador de conexión OLEDB como una fuente de datos, evitar el uso de  tabla o vista como modo de acceso de datos, esto es similar a “SELECT * FROM <TABLE_NAME>”, y como la mayoría de nosotros sabe, SELECT * es nuestro enemigo, esto toma todas las columnas en cuenta, incluidos aquellos que no son incluso necesarios. Siempre intentar usar  SQL Command para el modo de acceso a datos e incluir solamente nombres de las columnas necesarias en su sentencia T-SQL SELECT. De esta manera puede bloquear el paso de columnas innecesarias al downstream.

5.      En sus tareas de flujo de datos, utilice el administrador de conexión de archivos planos cuidadosamente, crear el Flat File connection manager con configuración predeterminada utilizará tipo de datos String [DT_STR] por defecto para todos los valores de columna. Esto siempre podría no ser una opción correcta porque puede tener algunas columnas de origen de tipo numérico, entero o booleanas, pasarlos como String a downstream tomaría espacio en memoria innecesaria y puede causar algún error en las etapas posteriores de la ejecución del paquete.

6.      La ordenación de datos es una operación de mucho tiempo, en SSIS puedes ordenar los datos procedentes de upstream utilizando Sort transformation, sin embargo se trata de una tarea intensiva de memoria y en varias ocasiones el resultado es degradante en el rendimiento general de la ejecución del paquete. Una buena práctica, sabemos que los datos vienen en la mayoría de las tablas de base de datos de SQL Server, es mejor realizar la operación de ordenación a nivel de base de datos donde se puede realizar la ordenación dentro de la consulta. Esto es en efecto bueno, porque el ordenamiento en la base de datos de SQL Server es mucho más refinado y ocurre a nivel de SQL Server. A su vez el resultado general mejora el rendimiento en la ejecución del paquete.

7.      Durante el desarrollo de paquetes SSIS, la mayor parte del tiempo uno tiene que compartir su paquete con otros miembros del equipo o uno tiene que implementar el mismo paquete en cualquier otro sistema de desarrollo, UAT o producción. Algo que un desarrollador debe asegurarse es de utilizar el nivel de protección del paquete correcto. Si alguien va con el nivel de protección del paquete predeterminado EncryptSenstiveWithUserKey entonces el mismo paquete podría no ser ejecutado como se esperaba en otros entornos porque  el paquete fue cifrado con una clave personal de usuario. Para hacer que la ejecución del paquete sea suave a través de otros entornos, uno debe primero comprender el comportamiento de propiedad de nivel de protección del paquete.

                DTSProtectionLevel Enumeration

                Namespace: Microsoft.SqlServer.Dts.Runtime
                Assembly: Microsoft.SqlServer.ManagedDTS (in microsoft.sqlserver.manageddts.dll)

                DontSaveSensitive: La Información sensible no es guardada en el paquete

                EncryptAllWithPassword: Cifra el paquete entero utilizando una contraseña

                EncryptAllWithUserKey: Cifra el paquete entero utilizando claves basados en el perfil del usuario. Sólo el mismo usuario utilizando el mismo perfil puede cargar el paquete.

                EncryptSensitiveWithPassword: Cifra sólo la información sensible que contiene en el paquete con una contraseña. DPAPI se utiliza para este cifrado

                EncryptSensitiveWithUserKey: Cifra todo el paquete con claves basados en el usuario actual.  Sólo el mismo usuario utilizando el mismo perfil puede cargar el paquete. Si un usuario diferente abre el paquete, la información confidencial se sustituye por los espacios en blanco. DPAPI se utiliza para este cifrado.

                ServerStorage: Cifra el paquete en una base de datos de MSDB de SQL Server. Esta opción es compatible sólo cuando un paquete se guarda en SQL Server. No es compatible cuando se guarda un paquete al sistema de archivos. El control de acceso de que quien puede descifrar el    paquete está controlado por los roles de base de datos SQL Server.

                En general, para evitar el error de implementación del paquete de un sistema a otro sistema, establezca nivel de protección de paquete en DontSaveSenstive.

8.      Esto es una buena práctica,  Utilizar Sequence Containers en paquetes SSIS para agrupar los distintos componentes en el nivel de Control Flow. Esto ofrece un conjunto rico de Facilidades

          Proporciona un alcance para las variables que puede utilizar un grupo de tareas relacionadas y contenedores

          Proporciona la facilidad para administrar propiedades de múltiples tareas estableciendo la propiedad a nivel de Sequence container

          Proporcionar facilidad para establecer el nivel de aislamiento de transacción en nivel de Sequence container

9.      Si diseña una solución ETL para una necesidad de negocio para una empresa pequeña, mediana o grande, siempre es bueno tener una característica de reinicio de los paquetes con errores desde el punto del error. SSIS tiene una característica llamada Checkpoint para soportar el reinicio de paquetes con errores desde el punto del error. Sin embargo, tiene que configurar la característica de Checkpoint a nivel del package.

                Las siguientes propiedades de paquete se debe establece para implementar el punto de control  (Checkpoint)

          CheckpointFileName: Especifica el nombre del archivo de punto de control

          CheckpointUsage: Especifica si se utilizan los puntos de control.

          SaveCheckpoints: Indica si el paquete guarda los puntos de control. Esta propiedad debe establecerse en True para reiniciar un paquete desde un punto de error.

10.  Execute SQL Task es nuestro mejor amigo en SSIS; podemos ejecutar uno o múltiples instrucciones de SQL a la vez, todos los stored procedures que contenga nuestra DB, volver a crear nuestras tablas de hecho y de dimensiones antes de cargar datos en ellos . La belleza de este componente es que puede devolver resultados en diferentes maneras por ejemplo, una fila individual, conjunto de resultados y XML. Puede crear diferente tipo de conexión utilizando este componente como OLEDB, ODBC, ADO, ADO.NET y el tipo de SQL Mobile, etc.. Yo prefiero usar este componente la mayor parte del tiempo con mi ForEach Loop container para definir el bucle de iteración sobre la base de resultado retornado por el Execute SQL Task.

Jonnathan De La Barra Sonrisa

About justindeveloper

I am MCP (Microsoft Certified Professional). MCTS (Microsoft Certified Technology Specialist) and MCPD (Microsoft Certified Professional Developer), also I am SAP Business One Certified!! Desarrollando desde el IDE de Visual Studio NET 2003 hasta ahora con el Visual Studio NET 2010. Desde Microsoft SQL Server 2000 hasta ahora con el Microsoft SQL Server 2008 R2 y tambien con SharePoint, desde WSS 3.0 y MOSS 2007 y ahora familirizandome con el Sharepoint Foundation 2010 & Sharepoint Server 2010. The software development will follow being every time more wonderful!
This entry was posted in Business Intelligence. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s