Para maximizar el rendimiento de la base de datos, qué comandos deben ejecutarse después de cargar grandes cantidades de datos en SQL Server 2008 a través de SSIS

11

He escrito un paquete SSIS para cargar datos de prueba en una base de datos vacía. Algunas de las tablas son muy grandes (~ 700 millones de filas). Una vez que el paquete SSIS se ha completado, ¿hay algún comando que deba ejecutar (como aprendiz DBA) para maximizar el rendimiento de la base de datos?

Por ejemplo, ejecuté EXEC sp_updatestatspero informó que ningún índice requería actualización.

¿Hay una lista de cosas que hacer una vez que se han cargado grandes cantidades de datos o SQL Server 2008 se encarga de todo eso por usted?

Mark Robinson
fuente

Respuestas:

8

Si está cargando en una base de datos vacía, podría / debería tomar medidas para evitar requerir pasos de mantenimiento adicionales después de la carga. La fragmentación es el enemigo, eso es lo que estás tratando de evitar.

  • Descarte todos los índices NC antes de cargar.
  • Después de la carga, agregue los índices NC para cada tabla en secuencia, es decir, no agregue un índice a la Tabla A, luego a la Tabla B y luego nuevamente a la Tabla A. Esto no tiene ningún efecto sobre la fragmentación, pero puede mejorar el tiempo necesario para agregar los índices en conjuntos de datos muy grandes (reduce la rotación de la agrupación de almacenamiento intermedio).
  • Si puede insertar datos en una tabla en orden de índice agrupado, deje el índice agrupado en su lugar. Si no puede, voltee los datos en un montón y vuelva a generarlos en una carga posterior de índice agrupada.

En lugar de copiar y pegar, lo guiaré hacia la lista muy completa de referencias para la optimización ETL @Marian reunidas en una respuesta a una pregunta que hice en BCP . Muchos de estos serán igualmente aplicables a su escenario.

Mark Storey-Smith
fuente
2
Interesante, en el enlace a los videos de SQLCAT y SSIS, su hallazgo nunca arrojó un índice NC. Supongo que este es otro caso de "depende"
billinkc
2
@billinkc ¿no era eso para cargas incrementales, en lugar de la base de datos vacía a la que se refiere esta pregunta también? De cualquier manera, las pruebas SQLCAT tienden a involucrar una clase de hardware que rara vez se ve en organizaciones típicas.
Mark Storey-Smith
5

Depende de la cantidad de ventana que tenga, pero en general actualizar las estadísticas y reconstruir / reorganizar índices es un buen paso. Aparte de eso, no debería haber nada más que debas hacer realmente.

Las estadísticas le dicen al optimizador de consultas cuántas filas es probable que se vean afectadas por una operación y eso a su vez le dice a SQL qué enfoque tomar para ejecutar sus consultas. Insertar datos puede sesgar la distribución y, si no ha insertado suficientes filas para activar una actualización de estadísticas en el modo de actualización automática, el manual debería ayudar. Si tiene la ventana, le digo que mantenga la parte de actualización de estadísticas.

Los índices pueden fragmentarse a medida que se agregan datos. Reconstruir o reorganizar ayuda a reducir esto, lo que puede conducir a un mejor rendimiento al acceder a sus datos.

Mike Walsh
fuente
44
En la línea de los Índices, en uno de los videos SSIS de SQLCAT , también sugieren una regla general que si el crecimiento de sus datos es> 100% y hay un solo NCI, suéltelos y vuelva a crearlos. Si es más del 10% y hay más de 2 NCI, soltar y recrear producirá un mejor rendimiento.
billinkc
2
Solo para aclarar el comentario de Bill: creo que está diciendo que la sugerencia es que los tiempos para soltar-crear significan soltar índice, cargar sus datos, luego recrear su índice ... En lugar de dejar los índices allí durante la carga y reconstruir después. Creo que sí de todos modos :-) y sí, gran punto, hago +1 en ese comentario.
Mike Walsh