Traitement en lot : Efficacité et performance
Cet article est le premier d’une série qui sera consacrée à la mise à jour massive de données SharePoint. Je ne vais donc pas détailler mes flux Power Automate dans cet article, mais justement tenter de décrire l’approche et la technique utilisée. Le détail des flux sera fait dans des articles suivants.
Contexte
Mon établissement scolaire utilise les outils de la plateforme Microsoft 365 pour un ensemble de traitements concernant les élèves. Gestion des présences, gestion des repas chauds, gestion des rendez-vous avec les parents, gestion des cartes d’étudiants, etc … Tous ces traitements s’appuient sur des données liées à mes étudiants. Nous avons fait le choix d’utiliser les listes SharePoint comme source de données à tous ces traitements. Nous avons une liste SharePoint avec l’ensemble des élèves de l’établissement.
Cette liste doit être mise à jour régulièrement pour assurer que mes différents traitements se fassent sur des données correctes. En fonction du nombre d’élèves de mon école, ces mise à jour peuvent prendre beaucoup de temps. La difficulté de maintenir à jour une liste d’élèves reprenant les données de 100, 500, 1.000 ou 5.000 élèves n’est pas la même.
Dans de nombreux cas, ces données je les ai dans des feuilles Excel. Je vais donc devoir mettre à jour ma liste SharePoint, de manière régulière, en effectuant des importations depuis une feuille Excel reprenant les données de mes élèves.
Mon outil préféré, pour faire ces mises à jour, sera Power Automate, via un flux d’importation permettant de récupérer les lignes d’un tableau Excel et de créer un élément dans une liste SharePoint pour chaque ligne de mon tableau.
Voici ma source de données, un tableau ‘Import’ dans une feuille Excel reprenant, pour le moment, une liste de 500 élèves fictifs.
L'approche classique
Sans trop rentrer dans les détails, voici un flux classique en Power Automate pour créer des éléments dans une liste SharePoint depuis un tableau dans Excel. Il s’agit ici d’une méthode itérative, chaque ligne de mon tableau Excel fera l’objet d’une création dans une liste SharePoint
Flux à déclenchement manuel, qui va lister une par une les lignes de mon tableau Excel, pour créer un élément dans une liste SharePoint.
Limitation : Par défaut le connecteur Excel Online Business ne permet de récupérer que 256 lignes d’un tableau. Il faudra paramétrer le connecteur pour qu’il puisse faire de la pagination de résultats et définir un seuil maximum de lignes à récupérer. Je vais définir ma limite à 5000 lignes (limite maximum)
Voici le temps nécessaire, en minutes, pour faire cette importation en fonction du nombre d’élèves (de lignes) dans mon tableau Excel.
500 lignes | 1.000 lignes | 2.000 lignes | 5.000 lignes |
4 minutes | 8 minutes | 15 minutes | 37 minutes |
On remarque que le temps d’exécution est croissant de manière significatif en fonction du nombre d’éléments à créer.
Et cela semble tout à fait logique. Cette approche, bien que simple à mettre en place, n’est pas très performante. Si vos flux Power Automate prennent trop de temps à s’exécuter, la plateforme Power Automate pourrait décider de minimiser les ressources à votre disposition, voir même désactiver vos flux, les plus gourmand en temps d’exécution.
L'approche en lots

Heureusement pour nous, Power Automate, nous propose des outils de traitement en lot (batch).
Que ce soit pour des opérations de création, de mise à jour ou de suppression sur les éléments d’une liste, nous pouvons envoyer ces opérations par lot plutôt qu’une opération à la fois. On parlera ici de batching.
Le traitement en lots dans Power Automate est une méthode qui permet de regrouper plusieurs opérations ou requêtes en une seule transaction. Cela est particulièrement utile pour optimiser les performances et réduire le nombre d’appels réseau, notamment lors de l’interaction avec des services comme SharePoint. En regroupant les opérations, le traitement en lots diminue la charge sur le réseau et accélère les processus, surtout pour des volumes importants de données.
Ce traitement en lot devra se faire via des appels API. Il existe deux familles d’API permettant ces traitements en lot
– API Rest SharePoint : https://domain.sharepoint.com/sites/sitnename/_api/$batch
– Graph API : https://graph.microsoft.com.v1.0/$batch
Dans notre contexte, Power Automate, nous allons utiliser le connecteur HTTP de SharePoint pour faire des appels API Rest SharePoint en lieu et place du connecteur classique pour créer des éléments SharePoint
Voici la structure d’un lot (batch)
--batch_eb1ad345-08b9-4df3-a2ee-a35123dfd71e
Content-Type: multipart/mixed; boundary="changeset_6e63c996-f808-41e3-91df-15c8850ed01a"
Content-Length: 7199
Content-Transfer-Encoding: binary
--changeset_6e63c996-f808-41e3-91df-15c8850ed01a
Content-Type: application/http
Content-Transfer-Encoding: binary
--changeset_6e63c996-f808-41e3-91df-15c8850ed01a
Content-Type: application/http
Content-Transfer-Encoding: binary
--changeset_6e63c996-f808-41e3-91df-15c8850ed01a
Content-Type: application/http
Content-Transfer-Encoding: binary
--changeset_6e63c996-f808-41e3-91df-15c8850ed01a--
--batch_eb1ad345-08b9-4df3-a2ee-a35123dfd71e--
Un lot peut être composé d’un ou plusieurs groupes de changements (changeset).
Toutes les opérations d’un groupe sont envoyés pour exécution en même temps.
Chaque groupe peut contenir maximum 1000 opérations.
Dans un groupe de changement, nous pouvons prévoir plusieurs type d’opération (Ajout, Mise à jour, ou Suppression).
Concernant ma liste SharePoint avec mes étudiants, voici les opétations envisagées
POST : Création d’un élève
DELETE : Suppression d’un élève
PATCH : Mise à jour d’un élève
Ici, un lot avec un seul groupe de changements, donc 1 batch avec 1 seul changeset, et plusieurs opérations dans ce changeset. Toutes les opérations de ce groupe de changements sont envoyés pour exécution en même temps.
Pour exploiter cette approche en batch mon flux va gagner en complexité. Pour le moment, je ne rentre pas dans le détail du flux. Mais mon objectif reste le même. Créer des éléments dans une liste SharePoint sur base de mon tableau Excel qui reprend les données sur mes élèves (Matricule, Nom et Prénom)
Mais son temps d’exécution a largement diminué. Voici un comparatif des temps d’exécution en fonction du nombre d’opérations par lot envoyés.
Classique 1 par 1
500 lignes | 1.000 lignes | 2.000 lignes | 5.000 lignes |
4 minutes | 8 minutes | 15 minutes | 37 minutes |
Par lot de 20 opérations
500 lignes | 1.000 lignes | 2.000 lignes | 5.000 lignes |
1 minute 30 | 2 minutes 44 | 5 minutes 05 | 11 minutes 18 |
Par lot de 50 opérations
500 lignes | 1.000 lignes | 2.000 lignes | 5.000 lignes |
1 minute 23 | 2 minutes 07 | 4 minutes 32 | 10 minutes 18 |
Par lot de 100 opérations
500 lignes | 1.000 lignes | 2.000 lignes | 5.000 lignes |
1 minute 47 | 2 minutes 44 | 5 minutes 04 | 12 minutes 08 |
Par lot de 500 opérations
500 lignes | 1.000 lignes | 2.000 lignes | 5.000 lignes |
1 minute 37 | 3 minute 31 | 6 minutes 22 | 15 minutes 31 |
Conclusions
Bien que l’approche, en lots d’opérations, est nettement plus efficace, les résultats en termes de performance semblent étranges. Il peut sembler compliqué de savoir comment dimensionner ses lots en fonction du nombre total d’opérations à effectuer. On aurait pu espérer que plus il y a d’opérations dans un lot, plus le traitement global serait rapide. On peut constater que ce n’est forcément le cas.
Pour dimensionner les lots d’opérations, il faut retenir quelques principes
– Les batchs plus petits consomment moins de ressources, ce qui peut éviter une surcharge du serveur SharePoint et éviter des goulots d’étranglement. Avec des batchs de 100 éléments et plus, le serveur peut être contraint de gérer davantage de données à la fois, ralentissant le traitement global.
– Temps de parsing et de validation : Chaque batch est analysé et validé côté serveur. Si le batch est trop grand, ce processus peut être plus long et moins efficace, retardant la réponse.
– Les batchs plus petits offrent généralement plus de stabilité mais peuvent augmenter le nombre total de requêtes.
– Limites imposées par l’API : Certaines API (comme celle de SharePoint) imposent une taille maximale pour les batchs. Par exemple, SharePoint recommande de ne pas dépasser une taille totale de 1 Mo par batch. Il est difficile de savoir qu’elle sera la taille de mon batch, à ne pas confondre avec le nombre d’opérations du batch.
– Limiter les batchs à environ 20-50 éléments dans un contexte comme SharePoint pour assurer fiabilité et performances.
Dans mes différents tests d’importation, on peut remarquer en effet, que le dimensionnement idéal est la constitution de lot avec 50 opérations. Mais il ne faut pas prendre cela pour argent comptant. Ici j’effectue des opérations de création, avec un jeu de données simple (Matricule, Nom, Prenom). Dans d’autres contextes, comme celui de la suppression, le dimensionnement idéal pourrait être tout autre.
Voici donc pour cette approche des traitements en lot au travers de Power Automate. Les articles suivant seront consacrés au détails des flux pour effectuer des opérations de création, de mise à jour et de suppression de mes données de cette liste SharePoint reprenant les élèves de mon établissement.
Comment avez-vous trouvé ce billet ?
N'hésitez pas à voter !
Score moyen 5 / 5. Nombre de vote 1