EDIT
Cette question a été fermée sur SO et repostée sur ServerFault.
J'ai un processus ETL quotidien dans SSIS qui construit mon entrepôt afin que nous puissions fournir des rapports jour après jour.
J'ai deux serveurs - un pour SSIS et l'autre pour la base de données du serveur SQL. Le serveur SSIS (SSIS-Server01) est un boîtier 8CPU, 32GB RAM. La base de données SQL Server (DB-Server) est une autre boîte de 8CPU, 32GB RAM. Les deux sont des machines virtuelles VMWare.
Dans sa forme simplifiée à l'extrême, le SSIS lit 17 millions de lignes (environ 9 Go) à partir d'une seule table sur le serveur de base de données, les déporte à 408 millions de lignes, effectue quelques recherches et une tonne de calculs, puis les agrège à environ 8 millions de lignes qui sont écrites à chaque fois dans une toute nouvelle table sur le même serveur de base de données (cette table sera ensuite déplacée dans une partition pour fournir des rapports au jour le jour).
J'ai une boucle qui traite 18 mois de données à la fois, soit un total de 10 ans de données. J'ai choisi 18 mois sur la base de mon observation de l'utilisation de la RAM sur le serveur SSIS - à 18 mois, il consomme 27 Go de RAM. Au-delà, SSIS commence à mettre en mémoire tampon sur le disque et les performances chutent.
J'utilise Le distributeur de données équilibrées de Microsoft pour envoyer les données sur 8 chemins parallèles afin de maximiser l'utilisation des ressources. Je fais une union avant de commencer à travailler sur mes agrégations.
Voici le graphique du gestionnaire de tâches du serveur SSIS
Voici un autre graphique montrant les 8 CPUs individuels
Comme vous pouvez le voir sur ces images, l'utilisation de la mémoire augmente lentement jusqu'à environ 27G à mesure que de plus en plus de lignes sont lues et traitées. Cependant l'utilisation du CPU est constante autour de 40%.
Le deuxième graphique montre que nous n'utilisons que 4 (parfois 5) processeurs sur 8.
J'essaie de faire en sorte que le processus s'exécute plus rapidement (il n'utilise que 40 % de l'unité centrale disponible).
Comment puis-je faire en sorte que ce processus soit plus efficace (moins de temps, plus de ressources) ?