Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Qual è la dimensione batch consigliata per SqlBulkCopy?

Ho un'utilità di importazione che si trova sullo stesso server fisico della mia istanza di SQL Server. Utilizzando un IDataReader personalizzato , analizza i file flat e li inserisce in un database utilizzando SQLBulkCopy . Un file tipico ha circa 6 milioni di righe qualificate, con una media di 5 colonne di testo decimale e breve, circa 30 byte per riga.

Dato questo scenario, ho riscontrato che una dimensione batch di 5.000 è il miglior compromesso di velocità e consumo di memoria. Ho iniziato con 500 e ho sperimentato con più grandi. Ho scoperto che 5000 sono in media 2,5 volte più veloci di 500. L'inserimento di 6 milioni di righe richiede circa 30 secondi con una dimensione batch di 5.000 e circa 80 secondi con una dimensione batch di 500.

10.000 non era misurabilmente più veloce. Passare a 50.000 ha migliorato la velocità di alcuni punti percentuali, ma non vale l'aumento del carico sul server. Oltre 50.000 non hanno mostrato miglioramenti nella velocità.

Questa non è una formula, ma è un altro punto dati da utilizzare.