Rendimiento de SqlBulkCopy

Estoy trabajando para aumentar el rendimiento de las cargas a granel; Cientos de millones de discos + diarios.

Me moví sobre esto para usar elIDatareader interfaz en lugar de las tablas de datos y obtuvo un aumento de rendimiento notable (500,000 registros más por minuto). La configuración actual es:

Un lector en caché personalizado para analizar los archivos delimitados.Envolviendo el lector de flujo en un flujo almacenado en búfer.Una clase de lector de objetos personalizada que enumera sobre los objetos e implementa elIDatareader interfaz.EntoncesSqlBulkCopy escribe al servidor

El grueso del cuello de botella de rendimiento está directamente enSqlBulkCopy.WriteToServer. Si hago una prueba unitaria del proceso hasta pero excluyendo solo elWriteToServer el proceso vuelve en aproximadamente 1 minuto.WriteToServer está tomando en 15 minutos adicionales +. Para la prueba de la unidad, está en mi máquina local, por lo que vive la misma unidad de disco en la base de datos, por lo que no tiene que copiar los datos a través de la red.

Estoy utilizando una tabla de almacenamiento dinámico (sin índices; agrupados o no agrupados; he jugado con varios tamaños de lotes sin grandes diferencias en el rendimiento).

Existe la necesidad de disminuir los tiempos de carga, por lo que espero que ahora alguien pueda exprimir un poco más de sangre de este giro.

Respuestas a la pregunta(1)

Su respuesta a la pregunta