2011-09-12 24 views
5

Tengo cca 25 bases de datos que necesito consolidar en 1 base de datos. En primer lugar he tratado de construir un paquete SSIS que copiar todos los datos de cada tabla en un solo lugar, pero luego llegué error:SSIS - error de falta de memoria

Information: The buffer manager failed a memory allocation call for 10485760 bytes, but was unable to swap out any buffers to relieve memory pressure. 1892 buffers were considered and 1892 were locked. Either not enough memory is available to the pipeline because not enough are installed, other processes were using it, or too many buffers are locked.

Entonces me di cuenta de que esto no es una buena idea y que tengo que insertar sólo los nuevos registros y actualizar los existentes. Después de eso probé esta opción:

  • Obtenga una lista de todas las conexiones. cuerdas
  • foreach db, copiar nuevos registros y actualizar los ya existentes (los que necesitan ser actualizados copia de la fuente de tabla temporal, se borran de destino y copia de la temperatura a la tabla de destino)

enter image description here

Así es como tarea de flujo de datos se parece

enter image description here

En algunos casos, los datos fluyen procceses más de un millón de filas. PERO, sigo teniendo el mismo error: me quedé sin memoria.

En administrador de tareas de la situación es el siguiente:

enter image description here enter image description here

tengo que señalar que hay 28 bases de datos están replicados en este mismo servidor y cuando este paquete no se está ejecutando SQL Server sigue utilizando más de 1 gb de memoria. He leído que es normal, pero ahora no estoy seguro de que ...

He instalado revisión para SQL Server que he encontrado en este artículo: http://support.microsoft.com/kb/977190 Pero no ayuda ... ¿Estoy haciendo algo mal o así es como funcionan las cosas y se supone que debo encontrar una solución alternativa?

Gracias,
Ile

+0

¿Qué has ocultado? un proceso "secreto"? –

Respuesta

1

he encontrado una solución y el problema era en SQL Server - se consume demasiada memoria. De forma predeterminada, la memoria máxima del servidor se estableció en 2147483647 (este es el valor predeterminado). Como mi servidor tiene 4 gb de RAM, limité este número a 1100 mb. Desde entonces, no hubo problemas de memoria, pero aun así, mis tareas de flujo fueron muy lentas. El problema estaba en usar Lookup. Por defecto, Lookup selecciona todo desde la tabla de búsqueda - Cambié esto y seleccioné solo las columnas que necesito para la búsqueda - aseguró el proceso varias veces.

Ahora todo el proceso de consolidación tarda aproximadamente 1: 15h.

3

Es posible que tenga problemas de memoria si su transformación Búsqueda se establece en caché completa. Según lo que he visto, Merge Join funciona mejor que la transformación de búsqueda si el número de filas supera los 10 millones.

Eche un vistazo a lo siguiente donde he explicado las diferencias entre Combinar combinación y transformación de búsqueda.

What are the differences between Merge Join and Lookup transformations in SSIS?

+0

No veo una forma de usar Merge Join para actualizar filas ...También probaría ese método pero me falta la parte para actualizar ... ¡Gracias! –

Cuestiones relacionadas