Optimisation des performances BCP pour les données BLOB

13

Je suis en train de planifier la migration en direct d'une base de données de 2 To vers des tables partitionnées. Le système est en gros un magasin de documents, la majorité de l'espace étant alloué à des LOB compris entre 50 Ko et 500 Ko, avec un petit pourcentage dans la plage de 500 Ko à 1 Mo. Une partie de la migration impliquera des données BCPing de l'ancienne à la nouvelle base de données.

Le BCP est l'approche privilégiée car la division actuelle / historique dans les données permet d'extraire les données plus anciennes par étapes (pendant les périodes plus calmes) avant un changement final, minimisant ainsi l'impact sur le système en direct. Le volume de données et la disponibilité du stockage empêchent une reconstruction in situ sur un schéma de partition .

Je pense qu'il y a peut-être des gains de performances à réaliser en expérimentant avec KILOBYTES_PER_BATCH plutôt qu'avec ROWS_PER_BATCH, en raison du contenu BLOB. Il est suggéré dans la documentation BCP que SQL peut optimiser les opérations en fonction de cette valeur.

Ce que je ne trouve pas, c'est des indications sur la nature de ces optimisations ou où commencer mes tests. En l'absence de suggestions, je vais essayer de petites séries à 4/8/16/32/64 Mo pour commencer.

Il est probable que certains gains découlent de la modification de la taille des paquets (paramètre BCP -a, plutôt que des paramètres au niveau du serveur), mais je suis enclin à faire passer cela au maximum 65535, sauf si quelqu'un a une approche plus formelle.

Mark Storey-Smith
la source

Réponses:

12

Ce n'est pas une réponse directe à votre question, mais il y a quelques articles dont vous pourriez bénéficier en les lisant (au cas où vous ne les auriez pas trouvés en premier :-)). Il s'agit de charger de nombreuses données à l'aide de bcp / copie en bloc. Je les ai tous lus et je n'ai rien trouvé de détaillé concernant KILOBYTES_PER_BATCH, ils utilisent tous ROWS_PER_BATCH, mais je suis sûr que vous trouverez d'autres informations utiles.

et les références MSDN évidentes:

Dans mon expérience personnelle, j'ai réussi à effectuer un chargement de données rapide en utilisant une charge parallèle et des tests avec plusieurs tailles de lot. Je suppose que seuls les tests personnels vous conviendront. J'espère que vous trouverez de bons conseils dans les références.

Marian
la source
Merci Marian, j'ai mis en signet quelques nouvelles découvertes de cette liste exhaustive. En tant que tâche ponctuelle, de nombreuses étapes incrémentielles / d'affinage ne sont pas aussi utiles, mais il y a beaucoup de conseils que je peux utiliser.
Mark Storey-Smith,
Oui, j'ai compris, pour moi aussi c'était une tâche ponctuelle, et j'ai trouvé des trucs utiles dans la liste. C'est une grande tâche cependant :-). Vous pouvez également faire une petite application .NET (si vous êtes familier avec .NET), comme dans un autre article de Linchi Shea: Impact sur les performances: le script d'insertion le plus optimal ne peut pas battre BulkCopy . Vous pourriez trouver la même chose que lui :-).
Marian
Comme il ne semble pas y avoir de conseils spécifiques BLOB pour le BCP dans la nature, je marque votre réponse très complète comme acceptée. Merci encore.
Mark Storey-Smith,
Désolé, je n'ai pas pu vous aider davantage, mais j'espère que vous y avez trouvé quelque chose d'utile.
Marian