Tengo un proceso ETL que involucra un procedimiento almacenado que hace uso intensivo de las declaraciones SELECT INTO
(mínimamente registradas y, por lo tanto, más rápidas, ya que generan menos tráfico de registro). Del lote de trabajo que tiene lugar en un particular almacenado el procedimiento almacenado, varias de las operaciones más costosas son carretes ansiosos que parecen simplemente almacenar en búfer los resultados de la consulta y luego copiarlos en la tabla que se acaba de realizar.Formas de evitar operaciones de spool ansiosas en SQL Server
La documentación de MSDN en eager spools es bastante escasa. ¿Alguien tiene una idea más profunda de si estos son realmente necesarios (y bajo qué circunstancias)? Tengo algunas teorías que pueden tener sentido o no, pero no tienen éxito en eliminarlas de las consultas.
Los archivos .sqlplan son bastante grandes (160kb), así que supongo que probablemente no sea razonable publicarlos directamente en un foro.
tanto, aquí hay algunas teorías que pueden ser susceptibles de respuestas específicas:
- La consulta utiliza algunas UDF de transformación de datos, tales como el análisis fechas formateadas. ¿Esta transformación de datos requiere el uso de carretes ansiosos para asignar tipos sensibles (por ejemplo, longitudes de varchar) a la tabla antes de que la construya?
- Como una extensión de la pregunta anterior, ¿alguien tiene una visión más profunda de lo que conduce o no esta operación en una consulta?
El aislamiento de lectura puede ser aplicable a las consultas de proceso desde un área de transición copiada de la fuente. Además, incluso si esto no soluciona mi problema particular, agrega un poco de conocimiento ya que esto no se menciona en ninguna de las publicaciones de MSDN que pude encontrar con respecto a las operaciones de spool ansiosas. – ConcernedOfTunbridgeWells
Me alegra que haya sido de ayuda. Es posible que podamos ayudarle aún más si publicó el código SQL en cuestión (genérico si es necesario, por supuesto) – Grank
Los spools ansiosos también son inferiores a los spools. No tengo ningún consejo sólido para hacer que sus eager se vuelvan lacios, pero el concepto de trabajar con solo una pequeña cantidad de datos a la vez y ponerlo a lo largo de la tubería sugiere un método alternativo: agrupe su trabajo en piezas más pequeñas de 1000 o 10000 filas a la vez. Se necesita bastante trabajo para llegar a un buen esquema de "caminar" que le permita pasar rápidamente a través de un índice agrupado a la vez, pero los resultados pueden ser sorprendentes ... – ErikE