Les statistiques de base de données obsolètes diminuent les performances de SharePoint Server

À propos des statistiques de base de données

Les statistiques d’optimisation des requêtes sont des objets qui contiennent des informations statistiques sur la distribution des valeurs dans une ou plusieurs colonnes d’une table ou d’une vue indexée. L’optimiseur de requête utilise ces statistiques pour estimer la cardinalité, ou le nombre de lignes, dans le résultat de la requête. Ces estimations de cardinalité permettent à l’optimiseur de requête de créer un plan de requête de haute qualité.

Par exemple, l’optimiseur de requête peut améliorer les performances des requêtes à l’aide d’estimations de cardinalité pour sélectionner l’opérateur de recherche d’index au lieu de l’opérateur d’analyse d’index plus gourmand en ressources. Dans le cas contraire, les statistiques obsolètes peuvent réduire les performances des requêtes à l’aide de plans de requête inefficaces.

Les grands déploiements SharePoint d’entreprise doivent avoir des plans de maintenance de base de données pour mettre à jour les statistiques de base de données sur les bases de données de contenu qui résident dans Microsoft SQL Server. Les clients ne doivent pas s’appuyer uniquement sur les travaux de maintenance de base de données SharePoint pour effectuer ces tâches. Pour plus d'informations, voir Meilleures pratiques pour SQL Server dans une batterie de serveurs SharePoint Server.

Symptômes

Lorsque les statistiques de base de données deviennent obsolètes, les installations de SharePoint Server peuvent rencontrer un ou plusieurs des symptômes suivants :

  • Temps de chargement lents et performances réduites susceptibles de générer une erreur HTTP 500 lorsque vous ouvrez une page de site

  • Performances plus lentes qui génèrent des messages d’erreur tels que l’exemple suivant :

    Service unavailable  
    Unknown SQL Exception 53  
    Server Error in '/' Application Runtime Error
    
  • L’exécution d’analyses de recherche provoque des performances sql Server inattendues, le verrouillage de base de données et le blocage

  • Les travaux de minuteur de longue durée, tels que « Traitement des données d’utilisation de Microsoft SharePoint Foundation », prennent de plus en plus de temps pour s'achever à chaque itération.

  • L’impossibilité d’ouvrir un site SharePoint et un message d’erreur semblable à ce qui suit :

    Unexpected System.Web.HttpException: Request timed out   
    
  • Délais d’expiration du rendu du site lorsque vous chargez la navigation et le message d’erreur suivant :

    PortalSiteMapProvider was unable to fetch children for node   
    
  • Utilisation élevée du processeur sur le serveur exécutant SQL Server lorsqu’il traite des requêtes SharePoint

La cause

Ces problèmes peuvent être causés par des statistiques de base de données obsolètes. SharePoint exécute quotidiennement une tâche planifiée pour mettre à jour les statistiques de base de données à l’aide de la procédure SQL proc_updatestatistics. Toutefois, pour différentes raisons, ce travail du minuteur peut ne pas être terminé ou ne pas mettre à jour toutes les tables de manière cohérente. Par exemple, si une sauvegarde s’exécute sur la base de données de contenu à partir de SQL Server simultanément avec le travail du minuteur SharePoint, le travail ne se poursuit pas.

Lorsque le travail du minuteur SharePoint qui met à jour les statistiques est terminé, les événements suivants peuvent être écrits dans les journaux ULS :

  • e9bf « Une erreur s’est produite lors de la mise à jour des statistiques dans la base de données , {0}»
  • cm1y « Mise à jour des statistiques dans la base de données , {0}»
  • dbl2 « Passer la mise à jour des statistiques de la base de données {0} car son état est {1} »
  • cm1x « Mise à jour des statistiques dans toutes les bases de données sur {0}»

Si ces conditions ne sont pas surveillées de près et si les actions correctives ne sont pas effectuées, les statistiques de base de données deviennent obsolètes et les problèmes de performances SharePoint se produisent finalement.

Résolution

Pour éviter ces symptômes et les pannes de service potentielles, les plans de maintenance SQL Server doivent être implémentés pour maintenir les statistiques de base de données de contenu SharePoint mises à jour à l’aide de l’option FULLSCAN. Pour plus d’informations, consultez statistiques d’index.

Lors de l’implémentation du plan de maintenance SQL Server pour mettre à jour les statistiques sur vos bases de données SharePoint, il n’est pas nécessaire de désactiver le travail à partir de SharePoint. Toutefois, étant donné que ces tâches de maintenance exécutent des fonctions similaires à partir des deux emplacements, il est permis de désactiver les « bases de données utilisées par SharePoint ont des statistiques d’index obsolètes » Règle Heath Analyzer de la batterie de serveurs SharePoint si les bases de données sont gérées par SQL. Pour plus d’informations sur la gestion du travail de mise à jour d’index à partir de SharePoint Server, consultez Les bases de données utilisées par SharePoint ont des statistiques d’index obsolètes (SharePoint 2013).

Plus d’informations

La mise à jour des statistiques des bases de données de contenu SharePoint, à l’aide de l’option FULLSCAN, quotidiennement à partir de SQL Server est une bonne pratique recommandée. Pour plus d’informations, consultez les meilleures pratiques pour SQL Server dans une batterie de serveurs SharePoint Server et la maintenance de base de données pour SharePoint Foundation 2010.

Toutefois, si votre batterie de serveurs SharePoint rencontre actuellement des problèmes de performances en raison de statistiques obsolètes, les informations suivantes peuvent être utilisées comme étape d’atténuation ponctuelle pour atténuer ce problème.

Pour afficher des informations de statistiques de base de données à partir d’une base de données spécifique, exécutez la requête suivante :

-- Checking the DB Stats  
select a.id as 'ObjectID', isnull(a.name,'Heap') as 'IndexName', b.name as 'TableName',   
stats_date (id,indid) as stats_last_updated_time   
from sys.sysindexes as a   
inner join sys.objects as b   
on a.id = b.object_id   
where b.type = 'U'  

Pour plus d’informations sur la révision des statistiques de base de données, consultez SHOW_STATISTICS DBCC.

Pour mettre à jour les statistiques de base de données sur une base de données unique qui utilise l’option FULLSCAN, exécutez la requête suivante :

-- Update DB Stats  
EXEC sp_MSforeachtable 'UPDATE STATISTICS ? WITH FULLSCAN'  

Remarque importante : l’option « sp_MSforeachtable » est une procédure non documentée fournie « telle quelle » et ne doit être utilisée que pour atténuer le problème immédiat. Nous ne vous recommandons pas d’utiliser cette procédure dans le cadre d’un plan de maintenance standard. Au lieu de cela, consultez notre documentation UPDATE STATISTICS (Transact-SQL) sur la façon d’implémenter un plan pour UPDATE STATISTICS, à l’aide de l’option FULLSCAN.

Selon la façon dont les statistiques de base de données sont obsolètes, vous devrez peut-être effacer le cache du plan de requête en exécutant la commande DBCC FREEPROCCACHE après avoir mis à jour les statistiques de base de données. Vous trouverez la syntaxe et les arguments de cette procédure dans DBCC FREEPROCCACHE (Transact-SQL). Cela permet de s’assurer que les nouvelles requêtes utilisent le plan d’exécution optimal après la mise à jour des statistiques de base de données. Par exemple, consultez la requête suivante :

-- Remove all elements from the plan cache  
DBCC FREEPROCCACHE  

Important

L’exécution de la commande DBCC FREEPROCCACHE efface le cache de tous les plans de requête dans l’instance SQL. Cette commande doit être bien comprise avant de l’exécuter pendant les heures de production.

Si la commande DBCC FREEPROCCACHE n’a pas été exécutée après la mise à jour des statistiques de base de données obsolètes, les requêtes avec des plans d’exécution inefficaces peuvent toujours résider dans le cache et être utilisées. Si c’est le cas, forcez une recompilation sur la procédure stockée spécifiée à l’aide de la procédure stockée (voir sp_recompile (Transact-SQL)). Par exemple, consultez la requête suivante :

USE SP2013_Content_DB  
GO  
sp_recompile proc_getwebnavstruct  

L’exécution de la commande sp_recompile avec les paramètres de procédure, de fonction ou de table cible un seul élément dans le cache pour la suppression sans affecter l’instance.

Vous avez toujours besoin d’aide ? Accédez à SharePoint Community.