Désactivation temporaire du seuil d’affichage de liste dans une grande liste

Corps :

Dans SharePoint 2010, de nouvelles limites ont été ajoutées pour protéger les serveurs et certains utilisateurs contre les opérations lourdes effectuées involontairement par d’autres utilisateurs. Pour obtenir une liste complète des seuils et limites spécifiques au logiciel SharePoint 2010, cliquez ici http://technet.microsoft.com/en-us/sharepoint/ff601870.aspx. Pour plus d’informations sur la signification des différentes limites, cliquez ici afin de lire la rubrique d’aide http://office2010.microsoft.com/en-us/sharepoint-server-help/manage-lists-and-libraries-with-many-items-HA010378155.aspx?redir=0. Pour une approche plus précise des fonctionnalités de gestion des grandes listes et des meilleures pratiques correspondantes, lisez ce livre blanc ayant pour thème : Conception de grandes listes et optimisation des performances des listes http://technet.microsoft.com/en-us/library/ff608068(office.14).aspx.

Le seuil d’affichage de liste est l’un des seuils inclus dans les paramètres de « limitation de ressources » de chaque application Web. Vous pouvez le gérer à partir de l’Administration centrale. Sa valeur par défaut est 5 000 ; par conséquent, tout affichage ou toute requête qui tente de traiter plus de 5 000 éléments à la fois est bloqué par le serveur SharePoint. Par exemple, si un affichage filtre une colonne non indexée dans une liste de 5 001 éléments, un message apparaît pour indiquer à l’utilisateur que la requête a été bloquée par le seuil d’affichage de liste. En outre, si une fenêtre Délai quotidien est définie, le message indique également les heures auxquelles cette opération est autorisée.

Peu de temps après la mise à niveau, certains utilisateurs constatent qu’ils n’ont pas accès à leurs données via des affichages déjà existants et qu’ils n’ont pas accès à ces données selon le mode souhaité (par exemple, via un tri à partir d’une colonne appelée « couleur ») ; par conséquent, ils doivent ajouter un index à leur grande liste. Toutefois, ils continuent d’être confrontés au seuil d’affichage de liste, ce qui les bloque dans leur tâche, sauf si :

  1. Ils attendent la fenêtre Délai quotidien définie par l’administrateur, à condition qu’elle ait été définie et activée au préalable. Par défaut, la fenêtre Délai quotidien n’est pas définie, car il revient à l’administrateur de déterminer quelle est la période située « en dehors des heures de pointe » de l’organisation. Ceci est la méthode recommandée, mais parfois cela ne suffit pas lorsque l’utilisateur doit être en mesure d’accéder aux données immédiatement.
  2. L’administrateur de batterie de serveurs affecte un nombre très élevé au seuil d’affichage de liste, ce qui permet à tous ceux qui disposent d’une grande liste d’accéder à la totalité de leurs affichages. Cette méthode est fortement déconseillée, car elle présente un risque élevé pour l’intégrité et la stabilité du serveur. Par ailleurs, au lieu de constituer une solution au problème d’un petit nombre de personnes, cette méthode représente une source potentielle de problèmes pour le plus grand nombre, en encourageant notamment la mauvaise construction des affichages et des requêtes.
  3. L’administrateur accorde à la liste spécifique de l’utilisateur une exemption temporaire par rapport au seuil d’affichage de liste. Cette exemption ne peut être effectuée que par programmation. Je vous montrerai comment procéder, puis comment lever cette exemption à la fin de la période spécifiée pour les utilisateurs. Je vous conseille fortement de limiter la mise en œuvre de cette exception, et de la supprimer dès qu’elle n’est plus nécessaire. Dans la plupart des cas, une semaine est un délai bien suffisant pour permettre aux utilisateurs de corriger leurs affichages ou leur code personnalisé.

Pour désactiver le seuil d’affichage de liste d’une liste particulière, vous pouvez utiliser le modèle objet afin de modifier la propriété « EnableThrottling » de la liste en lui affectant la valeur false (true est la valeur par défaut). Le code ci-dessous vous montre comment y parvenir pour une liste particulière, ou pour l’ensemble des listes d’un site spécifique. Il est préférable d’appliquer cette modification uniquement à des listes spécifiques, et non à un site entier, car cela permet non seulement de simplifier le suivi des problèmes de performances du serveur, mais également de renforcer l’importance d’une correction la plus rapide possible des listes pour les utilisateurs finals.

Voici un script écrit par Chris Clark (testeur de l’équipe SharePoint), qui permet d’effectuer cette modification. Pour l’annuler (c’est-à-dire supprimer l’exception d’une liste ou de toutes les listes contenues dans un site Web), remplacez simplement la ligne suivante :

$list.EnableThrottling = $false

par :

$list.EnableThrottling = $true

###########################################################################

#             MakeExceptionLIst Script

#             OnFailure: NONE

#             OnSuccess: Changes SPList settings to make one or more lists under an SPWeb Exception Lists                                         

#                                                                                            

#             Input Parameters:

#               - WebUrl ~ The URL of the SPWeb which contains the lists to be made exception lists

#               - ListName (Optional) ~ The name of the list to make an exception list

#  

#             Ex:

#               makeexceptionlist.ps1 -WebUrl http://localhost -ListName "Shared Documents"

#               makeexceptionlist.ps1 -WebUrl http://localhost/sites/site1 -ListName "*"

#

#       Exit code rule:

#       On success, exit 0

#       On failure, if no other scripts depend on this, exit a none-zero value

#       Do not use "return" to give the caller exit code, as this cannot be

#       captured by the caller process.

###########################################################################

Param([string]$WebUrl = "", [string]$ListName = "")

# Add Sharepoint pssnapin

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

###########################################################################

#

#             Turn off/on list throttling on selected list

#

###########################################################################

Function UpdateList($list)

{

     $listname = $list.Title

     Write-Host "Making list $listname an exception list"

     $list.EnableThrottling = $false

     $list.Update()

}

###########################################################################

#

#             Retrieve relevant objects (SPWeb, SPList) for operation and call Update

#

###########################################################################

$web = Get-SPWeb $WebUrl

if( $web -eq $NULL )

{

     Write-Host "Web not found.  Exiting"

     exit 1;

}

if ( $ListName -eq "*" )

{

     Write-Host "Locating all Lists under web..."

     $lists = $web.Lists

     foreach( $list in $lists )

     {

                UpdateList( $list )            

     }

}

elseif ( $ListName -ne "" )

{

     Write-Host "Locating List < $ListName >..."

     $list = $web.Lists[$ListName]

     if ( $list -ne $NULL )

     {

                Write-Host "List found!"

                UpdateList( $list )

     }

     else

     {

                Write-Host "List not found.  Exiting"

                exit 1;

     }

}

else

{

     Write-Host "Invalid List Name"

     exit 1;

}

Write-Host "Done!"

exit 0;

###########################################################################

#   End

#

###########################################################################

- Dina Ayoub

Chef de projet SharePoint, Microsoft

Date de publication : 15/08/2010 22:40

Ceci est une version localisée d’un article de blog. Vous trouverez la version originale sur Temporarily disabling List View Threshold on a large list