sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cuál es el tamaño de lote recomendado para SqlBulkCopy?

Tengo una utilidad de importación ubicada en el mismo servidor físico que mi instancia de SQL Server. Usando un IDataReader personalizado , analiza archivos planos y los inserta en una base de datos usando SQLBulkCopy . Un archivo típico tiene alrededor de 6 millones de filas calificadas, con un promedio de 5 columnas de texto breve y decimal, alrededor de 30 bytes por fila.

Dado este escenario, encontré que un tamaño de lote de 5000 era el mejor compromiso de velocidad y consumo de memoria. Empecé con 500 y experimenté con más grande. Encontré que 5000 es 2,5 veces más rápido, en promedio, que 500. Insertar los 6 millones de filas lleva unos 30 segundos con un tamaño de lote de 5000 y unos 80 segundos con un tamaño de lote de 500.

10,000 no fue perceptiblemente más rápido. Pasar a 50.000 mejoró la velocidad en algunos puntos porcentuales, pero no vale la pena el aumento de la carga en el servidor. Por encima de 50.000 no mostró mejoras en la velocidad.

Esta no es una fórmula, pero es otro punto de datos que puede usar.