none
Estimación de tiempos RRS feed

  • Pregunta

  • Hola,

    Actualmente necesito exportar e importar datos de una instancia SQL Server 2008 R2 a SQL Server 2014, tengo pensado utilizar el wizard de SQL Server.

    Es posible estimar la cantidad de tiempo que esto demore, considerando que la tabla que debo exportar/importar tiene 2.615.882.615 registros; es posible que con la cantidad de filas a importar el wizard deje de responder.

    Quedo atento a sus comentarios.

    Gracias.

    martes, 3 de septiembre de 2019 16:46

Todas las respuestas

  • Básicamente, el tiempo que vas a necesitar va a ser el mayor de los tres siguientes:

    1. El tiempo necesario para leer los registros de la tabla de origen.
    2. El tiempo necesario para transportarlos a través de la red al servidor de destino.
    3. El tiempo necesario para grabar en la tabla de destino.

    En la tabla de origen, si estás copiando la tabla entera (sin filtros), se hará un barrido completo de la tabla (o de clustered index). El tiempo necesario para esto es simplemente el que haga falta para leer desde el disco las páginas de datos que tenga la tabla, suponiendo que no esté fragmentada cosa que añadiría algo más de tiempo por los saltos del cabezal del disco. El dato importante es el de cuántas páginas hay que leer, no cuántos registros. Si los registros son pequeños, caben muchos por página. Y si son grandes caben pocos. Y si tienen BLOBs, requieren más páginas todavía. Examina el número de páginas en SSMS (solo la tabla, sin contar los índices), multiplica por el tamaño de página y divide por la velocidad de tu disco, y eso te dará el tiempo de lectura.

    Para el transporte por la red, toma el número total de bytes ocupados por los registros (que típicamente será menor que el número de bytes ocupados por las páginas, porque las páginas no están llenas al 100%), y divídelo por la velocidad de la red (100 MB/s si tienes una red de 1 Gigabit por segundo).

    Para el tiempo de grabación, toma el número de bytes a grabar y divídelo por la velocidad del disco en el que tengas el Log de transacciones. Con ese tamaño de tabla, presumo que el Log está en un disco distinto de los datos, de lo contrario la velocidad bajará mucho porque el disco tendrá que entrelazar las grabaciones de datos y del Log. Para maximizar la velocidad de grabación, desactiva todos los índices y constraints de la tabla de destino, y vuélvelos a activar una vez que hayas terminado de insertar los registros. Esto es mucho más rápido que dejar que los índices y constraints se recalculen sobre la marcha mientras se están insertando registros.

    No te preocupes por el tema de que "el wizard deje de responder". En realidad, el wizard es irrelevante en tiempo de ejecución. Lo que hace el wizard es generar un paquete para SSIS. Después, es el motor de SSIS el que lo ejecuta. Y SSIS es potentísimo para esto, utilizando una serie de buffers en memora que le permiten ir leyendo del origen y simultaneamente ir bombeando información hacia la tabla de destino. No tiene problema en gestionar miles de millones de registros.


    martes, 3 de septiembre de 2019 19:56