sql server - una - ¿Ventajas del uso de paquetes SSIS sobre procedimientos almacenados?
que son los procedimientos almacenados en sql server 2008 (13)
Si puedo cumplir con los requisitos ETL requeridos utilizando procedimientos almacenados, ¿alguna ventaja de usar paquetes SSIS en su lugar? Mis cosas ETL no es nada importante.
Tengo ganas de usar una vieja tecnología. Me gusta el SQL. La tecnología antigua no es igual de obsoleta, ya que los procedimientos almacenados no desaparecerán pronto.
El rendimiento será más rápido que el sp normal. No es necesario crear tablas temporales complejas, Cursor, indexación para recuperar datos.
La limpieza de datos es una ventaja de SSIS.
El manejo incremental solo es posible en ssis.
Podemos crear el archivo de configuración del paquete y desplegarlo en cualquier servidor. El usuario puede proporcionar los detalles del servidor e iniciar sesión en la información.
Interfaz gráfica del usuario.
El registro, manejo de errores es mejor en ssis.
A SSIS le falta alguna funcionalidad básica, no tiene un paquete de tipo Informatica que permita que el desarrollo con una declaración SQL se ejecute en archivos de texto sin formato y el servidor SQL carezca de DML de registro de errores como Oracle. Realmente pensé cuando Microsoft anunció la adición de la declaración Merge que, por supuesto, implementarían el grupo de errores, que es una de sus características más importantes, supongo que una vez más. El procesamiento de errores en el nivel de línea es importante y, si está utilizando una instrucción SQL para agregar lotes de datos, si un registro falla, todo el lote se deshace.
Estoy en medio de deshacerme de nuestros paquetes SSIS y de usar procedimientos almacenados. Para nosotros, los procesos almacenados son tremendamente mejores: 1) Son mucho más fáciles de mantener, no necesitamos ofertas, no necesitamos crear proyectos e importar paquetes a las ofertas, por lo que hay menos pasos para realizar cambios de proceso almacenados simples. 2) Todos nuestros paquetes actuales básicamente truncan datos en una tabla, luego se vuelven a llenar de otras tablas en el mismo servidor con mapeos directos. Muy fácil Insertar / seleccionar SQL para escribir. 3) Corren mucho más rápido. No tenemos cursores, ni estructuras de bucles, solo SQL directo. 4) No tenemos que gastar todo nuestro tiempo haciendo clic derecho y trabajando en pequeñas ventanas de ofertas tratando de seguir el flujo de la lógica. Todos sabemos TSQL básico y eso es suficiente para nuestras tareas.
He estado trabajando con SQL Server desde la versión 6.5, ¡eso es mucho tiempo! Y, según mi experiencia, la mayoría de ETL es lo suficientemente simple como para que T-SQL funcione perfectamente bien y no solo funcione, sino que también funcione muy bien: programación estructurada rápida, confiable y simple. Creo que cualquier cosa que se pueda hacer en SSIS se puede hacer en T-SQL por alguien que sepa lo que está haciendo.
La mayoría de las personas que son pesadas a favor de SSIS, de nuevo en mi experiencia, son desarrolladores sin experiencia que han crecido con herramientas gráficas y no saben realmente cómo programar.
He visto algunas mejoras tremendas en el rendimiento del uso de SSIS, es especialmente bueno si tiene procedimientos almacenados que usan servidores vinculados, ya que esto utiliza una mayor capacidad de procesamiento y los servidores vinculados tienden a arrastrar toda la tabla a la memoria antes de limitar las filas necesarias por un unirse. Teníamos un procedimiento almacenado que tardaba más de 7 horas en ejecutarse, dividí esto en datos de cada servidor, luego configuré una fuente de datos local para cada uno en SSIS permitiendo que el procesamiento se llevara a cabo localmente para cada fuente de datos según se adjunta a través de un servidor vinculado. El trabajo ahora toma 6 minutos para ejecutarse, diría que es una ganancia masiva.
Caralyn
He vivido en el terreno del procedimiento almacenado ETL para un almacén de datos de SQL Server de varios terabytes. Esta decisión se tomó en 2001 cuando .NET era 1.0, por lo que VB6 era la alternativa al lenguaje de programación, y SSIS aún no existía, era DTS. Te puedo decir que hubo ventajas y desventajas, como cualquier cosa.
Algunas consideraciones:
- Si todos los integrantes de su equipo comprenden SQL, es fácil profundizar en los procesos almacenados. SQL es una habilidad ampliamente conocida que puede ser un beneficio si tiene muchos escritores / lectores de ETL. Tienes que ser más que un usuario ocasional de SSIS para entender lo que está haciendo. El flujo gráfico de alto nivel es bueno para la documentación, pero si alguien necesita meterse en las entrañas, es mejor que conozcan bien el SSIS.
- SQL es un dolor para modularizar. Si utiliza UDF, incurrirá en un gran impacto en el rendimiento. Escribirá un código similar en varios lugares y se odiará a sí mismo por hacerlo, pero a menudo en los escenarios ETL el rendimiento es el rey. SSIS te ayudará a modularizar y factorizar tus tareas.
- No espere poder usar fácilmente el control de código fuente con SSIS. SQL - no hay problema. SSIS usa archivos XML horribles que se pueden registrar, pero buena suerte con las versiones anteriores para ver qué ha cambiado y cuándo.
- Debe pensar en sus SP de forma modular, aunque es difícil hacerlos tan modulares como desee. Usa tablas temporales para dividir tu procesamiento. Coloque los índices en esas tablas temporales antes de usarlos. No trates de hacer demasiado a la vez. Comenta todo.
- Si estás usando cursores, lo estás haciendo mal. No tengas miedo de encadenar alguna aplicación de consola externa que escribiste en el idioma que elijas para hacer algunas cosas para las que no estaba recortado SQL.
Por cierto, después de dejar la compañía, finalmente actualizaron la base de datos de SQL 2000 a 2008 y se trasladaron lentamente de procs almacenados a SSIS. En mi nueva empresa, somos propietarios de SSIS, pero después de usarlos, todos estuvimos de acuerdo en que nuestro .NET ETL personalizado y personalizado se ajusta mejor a nuestros propósitos. Cada uno toma su propia ruta. La decisión tiene que equilibrar el mantenimiento y el rendimiento y el conjunto de habilidades de su equipo y el conjunto de habilidades del grupo de trabajo en su área.
No veo ninguna limitación técnica obvia. El procedimiento almacenado puede ser más difícil de seguir que un paquete SSIS para operaciones ETL complejas, pero eso no será cierto en todos los escenarios. También descubrí que los paquetes (SSIS y DTS) se reconocen más fácilmente como "trabajos": los desarrolladores pasan por alto a menudo los procedimientos almacenados que son ejecutados por trabajos programados porque no pueden ver los trabajos programados.
Dicho esto, he visto ETL realizado por procedimientos almacenados y paquetes DTS / SSIS por igual y siempre que el procedimiento almacenado no sea un gran lío de código enredado, parece apropiado. No he visto que un método funcione mejor o de manera más confiable que otro (pero luego no he visto procedimientos almacenados haciendo ETL complejos).
Para proyectos pequeños, si tiene una capacidad sólida de SQL y una comprensión de los requisitos del negocio, ¡adelante!
De lo contrario, si se enfrenta a la extracción de datos complejos, tareas de transformación pesada. SSIS u otra herramienta ETL será suficiente.
aclamaciones
Para transferencias de datos entre servidores SQL, use SSIS por encima de SP. Puede enfrentar fácilmente una mejora del factor 10 como se mencionó anteriormente. Pasamos de 6 a 7 horas a un marco de tiempo más manejable al integrar el SP en un paquete SSIS.
En una nota al margen: SSIS es básicamente un conjunto de archivos XML que se pueden manipular / usar de diferentes maneras (por ejemplo, para documentación)
Probé algunas de las características en SSIS y no estaba contento con todas ellas. Me despedí del flujo de datos y no estaba muy contento con el rendimiento que vi. Lo que terminé haciendo fue desarrollar un paquete SSIS que tenía un flujo de control de tarea SQL, cada uno de los cuales ejecutaba un proceso almacenado.
Esto aseguró que el servidor SQL hiciera la mayor parte del E, T y el L. Creo que cuando se usa el componente de flujo de datos, los datos pasan del servidor SQL a la máquina que ejecuta el paquete, lo que hace que no sea tan eficiente.
Dicho esto, creo que hubiera intentado optimizar el flujo de datos (hace un tiempo desde que trabajé en él) si tuviera que interactuar con aplicaciones / bases de datos / sistemas DW de terceros.
Si su ETL es en su mayoría E y L, con muy poca T, y si puede escribir sus SP para que no se basen en cursores, entonces la ruta de solo SP está bien.
Para procesos más complejos, particularmente aquellos que involucran transformaciones pesadas, dimensiones que cambian lentamente, búsquedas de minería de datos, etc., SSIS tiene tres ventajas.
Primero, administra la memoria de manera muy eficiente, lo que puede resultar en grandes mejoras de rendimiento en comparación con T-SQL solo.
En segundo lugar, la interfaz gráfica le permite crear transformaciones grandes, complejas y confiables mucho más fácilmente que el T-SQL hecho a mano.
Y tercero, SSIS le permite interactuar más fácilmente con fuentes externas adicionales, lo que puede ser muy útil para cosas como la limpieza de datos.
Yo diría que depende algo de lo que estás haciendo. Sin embargo, desde mi experiencia, el margen de mejora con los paquetes SSIS es tremendo. Vimos 10 mejoras en nuestro entorno de almacenamiento de datos cuando tomamos algunos de los procedimientos almacenados de gran impacto y los colocamos en paquetes SSIS. La utilización de la memoria de SSIS (en esta situación de todos modos) hizo toda la diferencia.
Quiero reiterar que es importante saber lo que está haciendo. Por ejemplo, una declaración SQL usualmente superará a un flujo de datos SSIS cuando la transformación de datos sea de tabla a tabla en el mismo servidor.
Lo mejor es elegir un SP o dos y crearlos en SSIS y probarlos a ambos.
Parece que la respuesta para todas las preguntas de SQL comienza con, Depende ...
Usamos el método combinado para obtener lo mejor de dos mundos: usamos SSIS para obtener datos de fuentes externas y lo cargamos en paralelo en la base de datos de Staging. Luego usamos paquetes de SSIS para organizar las tuberías y activar los SP apropiados dentro del flujo de control.
Cualquier lógica de transformación se integra en los SP, ya que los flujos de datos son difíciles de administrar / modificar y no ofrecen ninguna ventaja significativa: 1) Es más fácil de modificar y solucionar problemas de SP que un paquete 2) No hay manera de reutilizar fácilmente los componentes en SSIS excepto llamar paquetes externos 3) SVN diff de SP funciona, diff de SSIS paquete es horrible :)
Además, utilizamos SSIS para ejecutar SP en paralelo para mejorar el rendimiento general.