Importar datos en paralelo con bloqueo de tabla

Microsoft SQL Server permite que varios clientes realicen importaciones masivas de datos en paralelo a una única tabla no indizada. Esto puede mejorar el rendimiento de las operaciones de importaciones masivas. La importación de datos en paralelo se admite en los tres comandos de importación masiva: bcp, BULK INSERT e INSERT ... SELECT * FROM OPENROWSET(BULK...).

Nota

Sólo las aplicaciones que utilicen las API basadas en ODBC o OLE DB de SQL pueden realizar cargas de datos en paralelo en una sola tabla. Cualquier aplicación, incluida la utilidad bcp, basada en la biblioteca cliente DB-Library que se proporciona con Microsoft SQL Server versión 6.5 o anterior no puede participar en las cargas de datos en paralelo en una instancia de SQL Server.

Si no especifica la opción o sugerencia TABLOCK, varias secuencias de importación masiva simultáneas adquieren bloqueos con una granularidad por debajo del nivel de tabla. En función de la distribución de datos, las secuencias de carga masiva simultáneas pueden bloquearse entre sí. Por lo tanto, la importación masiva de datos en paralelo en una tabla no indizada se realiza normalmente con TABLOCK.

Para importar datos de forma masiva en paralelo en una instancia de SQL Server con TABLOCK, considere lo siguiente:

  • El escenario más simple de importación de datos en paralelo es la carga de datos en una tabla no indizada (un montón).

  • Si la tabla no tiene ííndices, especifique la opción TABLOCK para la operación de importación masiva. Para obtener más información, vea Controlar el comportamiento de bloqueo para la importación masiva.

    Nota

    Si la tabla tiene ííndices, no puede realizar una operación de carga en paralelo con la opción TABLOCK. Además, los subprocesos simultáneos se bloquean entre sí si no se especifica TABLOCK. Antes de una operación de importación masiva, considere la posibilidad de eliminar los índices de la tabla. Para obtener información acerca de si debe conservar o eliminar los ííndices, vea Directrices para optimizar la importación masiva.

  • Divida entre los clientes los datos que se van a importar en tantos archivos de datos como clientes haya. Coloque uno de los archivos en cada uno de los clientes.

    Práctica recomendada  Para utilizar el procesador de la forma más eficaz, distribuya los datos de manera uniforme entre los clientes. Asegúrese de que los archivos de datos tengan un tamaño similar si desea importarlos en paralelo desde varios clientes a una instancia de SQL Server. De lo contrario, un subproceso de cliente con carga ligera podría terminar antes, por lo que se estaría utilizando la CPU del cliente de forma poco eficaz.

  • Para obtener el máximo rendimiento, el tamaño de lote especificado para cada cliente debe coincidir con el tamaño del archivo de datos del cliente. Para obtener más información, vea Administrar lotes para la importación masiva.

Una vez que los datos se han importado masivamente en la tabla, puede crear los ííndices precisos de la siguiente manera:

  1. Cree cada ííndice agrupado desde un solo cliente, de uno en uno. Para obtener más información, vea Crear ndices clúster.

  2. Cree los ííndices no agrupados. Éstos se pueden crear simultáneamente a partir de diferentes clientes. Para obtener más información, vea Crear índices no clúster.

Si no se especifica TABLOCK, puede realizar la importación masiva de datos en paralelo independientemente del número de ííndices del destino. En este caso, no se pueden realizar optimizaciones masivas y es posible que encuentre problemas de bloqueo durante la obtención de bloqueos en filas o páginas individuales.