Les statistiques de base de données obsolètes diminuent SharePoint performances du serveur
À propos des statistiques de base de données
Les statistiques pour l’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’un affichage indexé. 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 en utilisant des estimations de cardinalité pour sélectionner l’opérateur de recherche d’index au lieu de l’opérateur d’analyse d’index qui utilise le plus de ressources. Dans le cas contraire, les statistiques obsolètes peuvent diminuer les performances des requêtes à l’aide de plans de requête inefficaces.
Les déploiements de SharePoint grande 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 compter uniquement sur SharePoint de maintenance de base de données basée sur la base de données 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 SharePoint Server peuvent être l’un des symptômes suivants :
Temps de chargement lents et baisse des performances qui peuvent 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 ErrorL’exécution d’analyse de recherche entraîne des performances SQL Server, le verrouillage de base de données et le blocage inattendus
Travaux de longue durée tels que les travaux « Microsoft SharePoint Foundation Usage Data Processing » qui prennent progressivement plus de temps à se terminer pendant chaque itération.
L’impossibilité d’ouvrir SharePoint site web et un message d’erreur semblable à ce qui suit :
Unexpected System.Web.HttpException: Request timed outDélai d’affichage du site lorsque vous chargez la navigation et le message d’erreur suivant :
PortalSiteMapProvider was unable to fetch children for nodeUtilisation élevée du processeur sur le serveur qui s’exécute SQL Server lorsqu’il traite SharePoint requêtes
Cause
Ces problèmes peuvent être causés par des statistiques de base de données obsolètes. SharePoint exécute quotidiennement un travail du timer pour mettre à jour les statistiques de base de données à l’aide proc_updatestatistics SQL procédure. Toutefois, pour diverses raisons, ce travail du timer peut ne pas être terminé ou ne pas mettre à jour toutes les tables de manière cohérente. Par exemple, si une sauvegarde est en cours d’exécution sur la base de données de contenu à partir de SQL Server en même temps que le travail du SharePoint, le travail ne se poursuit pas.
Lorsque le SharePoint de mise à jour des 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 « Ignorer la mise à jour des statistiques de la base {0} de données, 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 des mesures correctives ne sont pas prises, les statistiques de base de données deviennent obsolètes et des problèmes de performances SharePoint de données se produisent.
Résolution
Pour éviter ces symptômes et les pannes de service potentielles, des 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, voir statistiques d’index.
Lorsque vous implémentez le 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 de SharePoint. Toutefois, étant donné que ces tâches de maintenance effectuent des fonctions similaires à partir des deux emplacements, il est possible de désactiver la règle « Les bases de données utilisées par SharePoint ont des statistiques d’index obsolètes » 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, voir Databases used by SharePoint have outdated index statistics (SharePoint 2013).
Informations supplémentaires
Il est recommandé de mettre à jour SharePoint statistiques des bases de données de contenu complètes, à l’aide de l’option FULLSCAN, quotidiennement à partir du SQL Server est une meilleure pratique. Pour plus d’informations, voir Best practices for SQL Server in a SharePoint Server farm and Database maintenance for SharePoint Foundation 2010.
Toutefois, si votre batterie de serveurs SharePoint rencontre actuellement des problèmes de performances en raison de STATS obsolètes, les informations suivantes peuvent servir d’étape de prévention à une seule étape pour remédier à ce problème.
Pour afficher les informations statistiques 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, voir DBCC SHOW_STATISTICS.
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 nondocumentée fournie « telle qu’elle » et qui ne doit être utilisée que pour atténuer le problème immédiat. Nous vous déconseillons d’utiliser cette procédure dans le cadre d’un plan de maintenance normal. Consultez plutôt notre documentation UPDATE STATISTICS (Transact-SQL) sur la façon d’implémenter un plan de mise à jour des STATISTIQUES à l’aide de l’option FULLSCAN.
Selon la façon dont les statistiques de base de données sont devenues obsolètes, vous devenez 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 permet d’effacer le cache de tous les plans de requête dans l SQL instance. 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 tel est le cas, forcez une recompilence 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 sp_recompile commande 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.
Encore besoin d’aide ? Accédez au site de la Communauté SharePoint.