Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Mettre à jour les statistiques SQL Server à l'aide d'un plan de maintenance de base de données

Les sauvegardes de bases de données, les vérifications d'intégrité et les optimisations de performances sont les principales tâches régulières des DBA. Les données client sont très importantes pour un DBA pour gérer la sauvegarde de la base de données et s'assurer de l'intégrité des sauvegardes. Ainsi, si quelque chose ne va pas avec une base de données de production, elle peut être récupérée avec un minimum de temps d'arrêt. Les vérifications de l'intégrité de la base de données sont également importantes car, en cas de corruption de la base de données, elle peut être corrigée avec un minimum de temps d'arrêt et de perte de données. La gestion des performances de la base de données est également importante. La gestion des performances de la base de données est une combinaison de plusieurs tâches.

  1. Identifiez la liste des requêtes gourmandes en ressources et aidez les développeurs à les réécrire.
  2. Créer et gérer des index sur la table. Effectuez également une défragmentation des index pour vous assurer qu'ils restent en bon état.
  3. Enfin, la gestion des statistiques des tables.

Dans mon article précédent, j'ai abordé le sujet de la création automatique de statistiques et de la mise à jour automatique des statistiques et comment elles peuvent aider à améliorer les performances. Dans cet article, je vais vous expliquer comment créer et programmer le plan de maintenance pour mettre à jour les statistiques.

Tout d'abord, laissez-moi vous expliquer ce que sont les statistiques SQL Server et comment elles peuvent aider à augmenter les performances du serveur SQL.

Statistiques SQL Server et leur importance

Les statistiques sont des métadonnées utilisées par l'optimiseur de requête SQL Server, qui aident à déterminer la meilleure façon de récupérer les données. L'optimiseur utilise des statistiques pour comprendre les données, leur distribution et le nombre de lignes qu'une requête donnée est susceptible de renvoyer à partir des statistiques disponibles. Sur la base de ces informations, il décide du chemin d'accès optimal aux données. Il détermine également s'il faut effectuer une analyse de table ou une recherche d'index, utiliser une jointure de boucle imbriquée ou une jointure de hachage, etc.

Si les statistiques sont obsolètes ou si elles ne sont pas disponibles, l'optimiseur peut choisir le mauvais plan d'exécution, ce qui réduit considérablement les performances de la requête. SQL Server peut automatiquement maintenir des statistiques et les actualiser en fonction de son suivi des modifications de données.

Les statistiques peuvent être créées et mises à jour automatiquement en activant "Auto Create Statistics" et "Auto Update Statistics". Cependant, pour certaines tables, telles que celles soumises à des changements importants dans la distribution des données, il est possible que la mise à jour automatique des statistiques de SQL Server soit insuffisante pour maintenir des niveaux élevés et constants de performances des requêtes.

Avant d'expliquer les différentes approches pour mettre à jour les statistiques, permettez-moi d'expliquer les différentes façons d'examiner les statistiques créées sur n'importe quelle table.

Comment consulter les statistiques

Nous pouvons afficher les statistiques de colonne et les statistiques d'index

  1. Utilisation de SQL Server Management Studio.
  2. Utilisation des procédures stockées système, des catalogues système et des vues de gestion dynamiques

Afficher les statistiques à l'aide de SQL Server Management Studio

Par exemple, je veux voir les statistiques créées sur les [Ressources Humaines].[Employé] tableau créé dans AdventureWorks2017 base de données. Pour ce faire, lancez SQL Server Management Studio. Développez ensuite AdventureWorks2017 base de données, développez [HumanResources].[Employee] table. Voir l'image suivante :

Utilisation des procédures stockées système et des vues de gestion dynamiques

Si vous utilisez une ancienne version de SQL Server, vous pouvez utiliser les sp_helpstats procédure système pour revoir les statistiques des tables. sp_helpstats affichera les statistiques créées par SQL Server ou par un utilisateur. Il n'affichera pas les statistiques créées par Index. Pour le démontrer, j'ai créé une statistique nommée User_Statistics_BirthDate sur les [Ressources Humaines].[Employé] tableau.

Voici l'exemple :

USE ADVENTUREWORKS2017 
GO
EXEC SP_HELPSTATS 
  'HUMANRESOURCES.EMPLOYEE'

Voici la sortie.

Vous pouvez consulter les statistiques en interrogeant sys.stats catalogue système. Il fournit des informations sur les statistiques créées par SQL Server, créées par les index et créées par un utilisateur.

Exécutez la requête suivante :

SELECT NAME         AS 'STATISTICS NAME', 
       AUTO_CREATED AS 'CREATED AUTOMATICALLY', 
       USER_CREATED AS 'CREATED BY USER' 
FROM   SYS.STATS 
WHERE  OBJECT_ID = OBJECT_ID('HUMANRESOURCES.EMPLOYEE')

Voici le résultat :

Maintenant, joignons ce tableau à d'autres catalogues système pour obtenir des informations détaillées sur les statistiques. Pour cela, exécutez la requête suivante :

SELECT [SCHEMAS].[NAME] + '.' + [OBJECTS].[NAME] AS [TABLE_NAME], 
       [INDEXES].[INDEX_ID]                      AS [INDEX ID], 
       [STATS].[NAME]                            AS [STATISTIC], 
       STUFF((SELECT ', ' + [COLUMNS].[NAME] 
              FROM   [SYS].[STATS_COLUMNS] [STATS_COLUMN] 
                     JOIN [SYS].[COLUMNS] [COLUMNS] 
                       ON [COLUMNS].[COLUMN_ID] = [STATS_COLUMN].[COLUMN_ID] 
                          AND [COLUMNS].[OBJECT_ID] = [STATS_COLUMN].[OBJECT_ID] 
              WHERE  [STATS_COLUMN].[OBJECT_ID] = [STATS].[OBJECT_ID] 
                     AND [STATS_COLUMN].[STATS_ID] = [STATS].[STATS_ID] 
              ORDER  BY [STATS_COLUMN].[STATS_COLUMN_ID] 
              FOR XML PATH('')), 1, 2, '')       AS [COLUMNS_IN_STATISTIC] 
FROM   [SYS].[STATS] [STATS] 
       JOIN [SYS].[OBJECTS] AS [OBJECTS] 
         ON [STATS].[OBJECT_ID] = [OBJECTS].[OBJECT_ID] 
       JOIN [SYS].[SCHEMAS] AS [SCHEMAS] 
         ON [OBJECTS].[SCHEMA_ID] = [SCHEMAS].[SCHEMA_ID] 
       LEFT OUTER JOIN [SYS].[INDEXES] AS [INDEXES] 
                    ON [OBJECTS].[OBJECT_ID] = [INDEXES].[OBJECT_ID] 
                       AND [STATS].[NAME] = [INDEXES].[NAME] 
WHERE  [OBJECTS].[OBJECT_ID] = OBJECT_ID(N'HUMANRESOURCES.EMPLOYEE') 
ORDER  BY [STATS].[USER_CREATED] 

GO

La requête ci-dessus renseigne les détails suivants

  1. La table sur laquelle les statistiques sont créées.
  2. ID d'index.
  3. Nom des statistiques.
  4. Colonnes incluses dans les statistiques.

Voici le résultat :

Dans la section suivante, j'expliquerai différentes manières de mettre à jour les statistiques.

Différentes approches de la mise à jour des statistiques

Nous pouvons mettre à jour les statistiques des manières suivantes :

  1. Créer un plan de maintenance SQL Server
  2. Créer à l'aide du script personnalisé.
  3. Exécutez manuellement la commande de mise à jour des statistiques sur une table individuelle.

Tout d'abord, je vais vous expliquer comment créer un plan de maintenance pour mettre à jour les statistiques.

Créer un plan de maintenance SQL Server pour mettre à jour les statistiques

Maintenant, dans cette démo, nous allons créer un plan de maintenance des statistiques de mise à jour pour mettre à jour les statistiques. Le plan de maintenance effectuera les tâches suivantes :

Commencez par créer un plan de maintenance. Pour ce faire, ouvrez SQL Server Management Studio. Développez l'instance de serveur SQL>> Dossier de gestion>> Sous Gestion, cliquez avec le bouton droit sur Plans de maintenance et sélectionnez Nouveau plan de maintenance. Voir l'image suivante :

Le nouveau plan de maintenance boîte de dialogue s'ouvre. Dans la zone, indiquez le nom du plan de maintenance, puis cliquez sur OK. Voir l'image suivante :

Le concepteur de plans de maintenance s'ouvre. Dans la boîte à outils du concepteur de plan de maintenance, faites glisser et déposez « Tâche de mise à jour des statistiques » dans la fenêtre du concepteur. Voir l'image suivante :

Maintenant, double-cliquez sur Tâche de mise à jour des statistiques . La tâche de mise à jour des statistiques boîte de dialogue s'ouvre. Dans la boîte de dialogue, il existe des options qui peuvent être utilisées pour personnaliser le plan de maintenance. Voir l'image suivante :

Nous pouvons personnaliser les options suivantes lors de l'utilisation du plan de maintenance des statistiques de mise à jour.

  1. Mettre à jour les statistiques de tous les objets d'une base de données spécifique. Voir l'image suivante :
  2. Objets spécifiques des bases de données sélectionnées. Vous pouvez mettre à jour les statistiques de Toutes les tables et vues / Tables et vues spécifiques. Voir l'image suivante :

    Si nous choisissons des tables ou des vues, SQL remplira le nom des vues ou des tables dans la sélection boite de dialogue. Voir l'image suivante :
  3. La troisième option est Mettre à jour . Nous pouvons mettre à jour toutes les statistiques des tables/vues, ou nous pouvons choisir de mettre à jour uniquement les statistiques de colonne (statistiques créées sur des colonnes non indexées), ou nous pouvons choisir uniquement les statistiques d'index (statistiques créées par les index). Voir l'image suivante :
  4. Nous pouvons également sélectionner le type d'analyse de toutes les statistiques. Nous pouvons choisir Analyse complète ou Échantillonner par un pourcentage spécifié ou des lignes spécifiées. Voir l'image suivante :

Maintenant, comme je l'ai mentionné, nous allons créer une tâche de maintenance qui mettra à jour les statistiques de toutes les tables dans AdventureWorks2017 base de données avec une analyse complète. Alors, choisissez les options en conséquence. Une fois la tâche de maintenance configurée, elle ressemble à ceci :

Une fois la tâche de maintenance correctement configurée, fermez la boîte de dialogue des statistiques de mise à jour. Après configuration, le plan de maintenance ressemble à ceci :

Une fois le plan de maintenance créé, planifions le plan de maintenance. Pour cela, cliquez sur l'icône du calendrier en face de la Description colonne. Voir l'image suivante :

Une fois que vous avez cliqué sur le bouton du calendrier, une boîte de dialogue permettant de configurer la planification de la tâche s'ouvre. Voir l'image suivante :

Comme je l'ai mentionné, notre plan de maintenance des statistiques de mise à jour s'exécutera tous les dimanches à 4h00. Nous allons donc configurer le calendrier des travaux en conséquence. La planification des travaux est simple. Une fois que vous avez configuré la planification, la boîte de dialogue ressemble à ceci :

Une fois qu'un calendrier d'exécution est configuré, l'ensemble du plan de maintenance ressemble à l'image suivante. Enregistrez le plan de maintenance et fermez la fenêtre.

Maintenant, exécutons ce plan de maintenance en exécutant le Job SQL créé par le plan de maintenance. Pour ouvrir les travaux SQL, développez SQL Server Agent et développez Emplois . Vous pouvez voir le travail SQL créé par le plan de maintenance SQL. Maintenant, pour exécuter le travail, faites un clic droit sur Mettre à jour les statistiques hebdomadaires.Weekly.Subplan_1 et cliquez sur Commencer le travail à l'étape . Voir l'image suivante.

Une fois la tâche terminée, vous pouvez voir la boîte de dialogue suivante :Exécution réussie de la tâche.

Résumé

Dans cet article, j'ai couvert :

  1. Une explication détaillée des statistiques SQL Server et de leur importance.
  2. Différentes options pour mettre à jour les statistiques.
  3. Un exemple pratique de création d'un plan de maintenance SQL pour mettre à jour les statistiques.

Dans mon prochain article, j'expliquerai différentes commandes T-SQL pour mettre à jour les statistiques. De plus, j'expliquerai un script T-SQL qui mettra à jour les statistiques en fonction du volume de modifications de données survenues après l'insertion/la mise à jour/la suppression de la table.