Limite des 2000 éléments à qui s'applique-t-elle ? [MAJ : 03/02/2010]
Par Edgar le lundi 30 novembre 2009, 11:55 - SharePoint 2007 - Lien permanent
Bonjour à tous,
MAJ du 3 Février 2010 : je reviens sur la conclusion de cet
article qui est en partie erronée.
Pour les utilisateurs finaux, il est important de garder dans tous les cas des vues (affichages) dont le nombre total d'éléments (toutes pages confondues) soit inférieur à 2000 éléments (environ ça peut être un peu plus ou un peut moins).
En effet ce que ne montre pas le test ci-dessous c'est que lorsque beaucoup d'utilisateurs exécutent des affichages renvoyant plus de 2000 éléments au total, le serveur pourrait être très rapidement surchargé même si chaque page ne renvoit que 100 éléments. La gestion d'un nombre maximum d'éléments par page (paging) permet de reduire cette surcharge mais ne l'annule pas. Dans les résultats ci-dessous dès que l'on dépasse 500 éléments par page les performances se réduisent essentiellement à cause du temps de transfert des informations du serveur vers le navigateur et du temps nécessaire au navigateur pour interpreter et mettre en page ces informations. Cependant la surchage sur le serveur est importante à partir du moment où l'on dépasse cette fameuse limite des 2000 éléments, essentiellement à cause de contraintes sur les bases de données SQL Server (pour les amateurs de données techniques lire cet article : http://sharepoint.microsoft.com/blogs/GetThePoint/Lists/Posts/Post.aspx?ID=162)
Il existe donc que deux solutions, mettre moins de 2000 éléments par niveau (racine, dossiers, sous-dossiers,...) ou utiliser des vues avec des filtres renvoyant moins de 2000 éléments (moins efficace que la répartition par dossiers mais permet d'améliorer les performances tout de même).
Dans le deuxième cas, il est important de noter que la première colonne utilisée pour le filtre doit être indexée pour améliorer les performances (les indexes sur les autres colonnes ne sont pas pris en compte lors de la requête). Il est important également de noter que si vous utilisez un filtre à plusieurs colonnes, seuls le nombre d'éléments renvoyés par le filtre sur la première colonne est important. Ainsi si je créé un affichage utilisant un filtre du type "Service égale à DRH ET Créé par égale à Jean Dupont" si la colonne Service contient plus de 2000 éléments avec la valeur DRH, le filtre ne sera pas efficace même si le résultat final (les deux filtres associés) renvoit moins de 2000 éléments !
Comme quoi la gestion des performances est un sujet complexe, j'espère que cet éclaircissement vous sera utile lors de la gestion de grandes listes
Pour plus d'infos : http://office.microsoft.com/en-us/sharepointtechnology/HA101736671033.aspx (article en anglais, je n'ai pas trouvé malheureusement d'équivalent en français).
Fin de la MAJ
On entend régulièrement (y compris de ma part) que les listes SharePoint ont une limite de performance aux alentours de 2000 éléments (a visto de naz...), ce qui est vrai, mais depuis quelques temps déjà je me demandais dans quelle mesure cette perte de performance s'appliquait. En effet la plupart des articles que j'ai lu parlent d'une perte de performance à partir de 2000 éléments par conteneur (dossier) ou par vue, mais ce dernier terme n'est pas clair pour moi.
Une vue peut afficher 2000 éléments au total mais répartis par page de 100 éléments (le défaut), dans ce cas est-ce le nombre d'élément par page ou pour la vue globale dont il faut tenir compte ?
De plus à qui s'applique cette consigne ? Aux utilisateurs finaux ? Aux
développeurs ? Aux deux ?
Afin d'avoir enfin la réponse à ces questions j'ai testé différents cas et j'ai
calculé les temps d'affichage des pages (oui je sais je suis dans ma phase
statistiques en ce moment...). Je me suis donc contenté de tester la partie
utilisateurs finaux, car des articles pour les développeurs ont déjà été écrit
(un lien vers l'un deux est donné en fin d'article).
Le protocole de test
- J'ai créé un site dans lequel j'ai ajouté une liste générique contenant 4 colonnes : Title (1 seule ligne de texte), LinkedValue (Lookup lié à une liste contenant 3 valeurs), Choice (Colonne type choix à 3 valeurs), et LongText (Multiple ligne de texte).
- J'ai ensuite créé une application console qui m'a permis d'ajouter des éléments hétérogènes dans la liste (nombre aléatoire pour la valeur liée, le choix, et caractères aléatoires pour le texte long).
- Enfin j'ai testé dans l'interface de SharePoint l'affichage d'une page contenant plus ou moins d'éléments, dans une liste contenant elle aussi plus ou moins d'éléments :p
Note : les temps affichés ne sont pas à la seconde près c'est l'ordre de grandeur qui importe ici.
Note 2 : J'ai testé sur une liste mais à priori les résultats sur les Bibliothèque de documents devraient être les mêmes (des amateurs pour le test ?)
Les résultats
Nb E Tot = Nombre d'éléments total dans la liste
Nb E Page = Nombre d'éléments affichés dans la page
Temps = Temps moyen d'affichage de la page
|
|
* : Sur mon IE 7 une fois les résultats affichés l'interface a mis quelques
secondes à répondre aux clics.
** : Sur mon IE 7 l'interface est devenue très lente, plusieurs secondes entre
1 clic et le déclenchement de l'action
*** : sur mon IE 7 l'interface est carrément devenue inutilisable, plusieurs
dizaines de secondes pour sortir de la page, les autres IE répondaient
normalement.
|-> Tout ces comportements sont sûrement dû au JavaScript dans la
page...
**** : J'ai arrêté le chrono le temps n'étant de toute façon plus acceptable
depuis longtemps.
Mon analyse
On voit clairement que peu importe le nombre d'éléments dans la liste si le nombre d'éléments dans la page reste faible (< 500) les performances sont bonnes. Par contre plus on augmente le nombre d'éléments dans la page et plus on voit un temps de chargement conséquent. Ce qui est tout à fait normal car il faut plus de temps pour générer le code, pour l'envoyer au navigateur, et à celui-ci pour interpréter le code.
A noter que ces temps ne le montrent pas, mais durant l'affichage le CPU est à 100% ! Sauf pour les affichages de moins de 2 secondes où il oscille entre 30% et 60% mais pendant un pic de quelques millisecondes seulement. Ceci signifie que des affichages de plusieurs secondes sur une liste pourraient facilement mettre un serveur à genoux s'ils sont déclenchés par plusieurs utilisateurs sur différentes listes en même temps !
Résultat : si vous suspecter une utilisation importante de votre (ou vos) sites SharePoint, gardez des temps inférieurs à 1 seconde pour les pages de vues.Bon alors ?
Cette limite des 2000 éléments n'est à priori pas valable pour les utilisateurs finaux, car on voit déjà clairement des limites à partir de plus de 500 éléments par page. Par contre elle concerne bien les développeurs qui devront en tenir compte pour leurs applications.
Mon conseil est donc le suivant :
- Pour les utilisateurs fonctionnels, ne pas utiliser de vues affichant plus de 500 éléments par page et vos performances seront toujours optimales.
- Pour les développeurs, suivre les recommandations de Microsoft sur le sujet et notamment bien lire l'article suivant : Working with large lists in Office SharePoint Server 2007 complété par l'article suivant de Reza Alirezaei :http://blogs.devhorizon.com/reza/?p=790
Bon code à tous !