Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Quelle est la taille de lot recommandée pour SqlBulkCopy ?

J'ai un utilitaire d'importation assis sur le même serveur physique que mon instance SQL Server. Utilisation d'un IDataReader personnalisé , il analyse les fichiers plats et les insère dans une base de données à l'aide de SQLBulkCopy . Un fichier typique contient environ 6 millions de lignes qualifiées, avec en moyenne 5 colonnes de texte décimal et court, environ 30 octets par ligne.

Compte tenu de ce scénario, j'ai trouvé qu'une taille de lot de 5 000 était le meilleur compromis entre vitesse et consommation de mémoire. J'ai commencé avec 500 et expérimenté avec plus grand. J'ai trouvé que 5000 était 2,5 fois plus rapide, en moyenne, que 500. L'insertion des 6 millions de lignes prend environ 30 secondes avec une taille de lot de 5 000 et environ 80 secondes avec une taille de lot de 500.

10 000 n'était pas sensiblement plus rapide. Passer à 50 000 a amélioré la vitesse de quelques points de pourcentage, mais cela ne vaut pas la charge accrue sur le serveur. Au-dessus de 50 000, aucune amélioration de la vitesse n'a été observée.

Ce n'est pas une formule, mais c'est un autre point de données que vous pouvez utiliser.