Statistiques du catalogue

Lorsque le compilateur de requêtes optimise les plans de requête, ses décisions sont fortement influencées par les informations statistiques relatives à la taille des tables de base de données, des index et des vues statistiques. Ces informations sont stockées dans les tables de catalogue système.

L'optimiseur utilise également des informations sur la distribution des données dans des colonnes spécifiques de tables, d'index et de vues statistiques si ces colonnes sont utilisées pour sélectionner des lignes ou pour joindre des tables. L'optimiseur utilise ces informations pour estimer les coûts des plans d'accès alternatifs pour chaque requête.

Des informations statistiques sur le rapport de cluster des index, le nombre de pages élémentaires dans les index, le nombre de lignes de table qui débordent leurs pages d'origine et le nombre de pages remplies et vides dans une table peuvent également être collectées. Vous pouvez utiliser ces informations pour décider quand réorganiser les tables ou les index.

Les statistiques de table dans un environnement de base de données partitionnée sont collectées uniquement pour la partie de la table qui réside sur la partition de base de données sur laquelle l'utilitaire est exécuté, ou pour la première partition de base de données du groupe de partitions de base de données qui contient la table. Les informations sur les vues statistiques sont collectées pour toutes les partitions de base de données.

Statistiques mises à jour par l'utilitaire runstats

Les statistiques de catalogue sont collectées par l'utilitaire runstats, qui peut être démarré en exécutant la commande RUNSTATS , en appelant la procédure ADMIN_CMD ou en appelant l'API db2Runstats . Les mises à jour peuvent être lancées manuellement ou automatiquement.

Dans IBM Data Studio Version 3.1 ou ultérieure, vous pouvez utiliser l'assistant de tâches pour collecter les statistiques du catalogue. Les assistants de tâche peuvent vous guider lors du processus de définition d'options, en vérifiant les commandes générées automatiquement pour effectuer la tâche et en exécutant ces commandes. Pour plus de détails, voir Administration des bases de données avec des assistants de tâche.

Les statistiques sur les tables temporaires déclarées ne sont pas stockées dans le catalogue système, mais dans des structures de mémoire qui représentent les informations de catalogue pour les tables temporaires déclarées. Il est possible (et dans certains cas, il peut être utile) d'exécuter des statistiques d'exécution sur une table temporaire déclarée.

L'utilitaire runstats collecte les informations suivantes sur les tables et les index:
  • Nombre de pages qui contiennent des lignes
  • Nombre de pages utilisées
  • Nombre de lignes dans la table (la cardinalité)
  • Nombre de lignes en dépassement de capacité
  • Pour les tables MDC et ITC, nombre de blocs contenant des données
  • Pour les tables partitionnées, degré de mise en cluster des données dans une partition de données unique
  • Les statistiques de distribution des données, qui sont utilisées par l'optimiseur pour estimer les plans d'accès efficaces pour les tables et les vues statistiques dont les données ne sont pas distribuées de manière égale et dont les colonnes comportent un nombre significatif de valeurs en double
  • Statistiques d'index détaillées, qui sont utilisées par l'optimiseur pour déterminer l'efficacité d'accès aux données de table via un index
  • Les statistiques de sous-élément pour les prédicats LIKE, en particulier celles qui recherchent des motifs dans des chaînes (par exemple, LIKE %disk%), sont également utilisées par l'optimiseur
L'utilitaire runstats collecte les statistiques suivantes pour chaque partition de données d'une table. Ces statistiques sont uniquement utilisées pour déterminer si une partition doit être réorganisée:
  • Nombre de pages qui contiennent des lignes
  • Nombre de pages utilisées
  • Nombre de lignes dans la table (cardinalité)
  • Nombre de lignes en dépassement de capacité
  • Pour les tables MDC et ITC, nombre de blocs contenant des données
Les statistiques de distribution ne sont pas collectées:
  • Lorsque les paramètres de configuration de base de données num_freqvalues et num_quantiles sont définis sur 0
  • Lorsque la distribution des données est connue, par exemple lorsque chaque valeur de données est unique
  • Lorsque la colonne contient un type de données LONG, LOB ou structuré
  • Pour les types de ligne dans les sous-tables (les statistiques de niveau table NPAGES, FPAGES et OVERFLOW ne sont pas collectées)
  • Si des distributions de quantiles sont demandées, mais qu'il n'y a qu'une seule valeur non nulle dans la colonne
  • Pour les index étendus ou les tables temporaires déclarées
L'utilitaire runstats collecte les informations suivantes sur chaque colonne d'une table ou d'une vue statistique et sur la première colonne d'une clé d'index:
  • Cardinalité de la colonne
  • Longueur moyenne de la colonne (espace moyen, en octets, requis lorsque la colonne est stockée dans la mémoire de la base de données ou dans une table temporaire)
  • Deuxième valeur la plus élevée dans la colonne
  • Deuxième valeur la plus faible de la colonne
  • Nombre de valeurs nulles dans la colonne
Pour les colonnes qui contiennent des types de données LOB ou LONG, l'utilitaire runstats collecte uniquement la longueur moyenne de la colonne et le nombre de valeurs nulles dans la colonne. La longueur moyenne de la colonne représente la longueur du descripteur de données, sauf lorsque les données LOB sont situées en ligne sur la page de données. La quantité moyenne d'espace requise pour stocker la colonne sur le disque peut être différente de la valeur de cette statistique.
L'utilitaire runstats collecte les informations suivantes sur chaque colonne XML:
  • Nombre de documents XML NULL
  • Nombre de documents XML non NULL
  • Nombre de chemins distincts
  • Somme du nombre de noeuds pour chaque chemin distinct
  • Somme du nombre de documents pour chaque chemin distinct
  • Les k paires de (chemin, nombre de noeuds) ayant le plus grand nombre de noeuds
  • Les k paires de (chemin, nombre de documents) ayant le plus grand nombre de documents
  • Les k triples de (chemin, valeur, nombre de noeuds) avec le plus grand nombre de noeuds
  • Les k triples de (chemin, valeur, nombre de documents) avec le plus grand nombre de documents
  • Pour chaque chemin distinct qui conduit à un texte ou à une valeur d'attribut:
    • Nombre de valeurs distinctes que ce chemin peut prendre
    • Valeur la plus élevée
    • Valeur la plus faible
    • Nombre de noeuds de texte ou d'attribut
    • Nombre de documents contenant le texte ou les noeuds d'attribut
Chaque ligne d'une colonne XML stocke un document XML. Le nombre de noeuds pour un chemin ou une paire chemin-valeur fait référence au nombre de noeuds accessibles par ce chemin ou cette paire chemin-valeur. Le nombre de documents d'une paire chemin ou chemin-valeur fait référence au nombre de documents qui contiennent cette paire chemin ou chemin-valeur.
Pour les versions Db2® V9.7 Fix Pack 1 et les versions ultérieures, les points suivants s'appliquent à la collecte des statistiques de distribution sur une colonne XML :
  • Les statistiques de distribution sont collectées pour chaque index sur données XML spécifiées sur une colonne XML.
  • L'utilitaire runstats doit collecter à la fois des statistiques de distribution et des statistiques de table pour collecter des statistiques de distribution pour un index sur des données XML. Les statistiques de table doivent être collectées pour que les statistiques de distribution soient collectées car les statistiques de distribution XML sont stockées avec les statistiques de table.

    La collecte de statistiques d'index uniquement ou la collecte de statistiques d'index lors de la création d'index ne collectera pas de statistiques de distribution pour un index sur des données XML.

    Par défaut, l'utilitaire RUNSTATS collecte des informations sur 250 quantiles au maximum pour établir des statistiques de distribution pour chaque index sur données XML. Le nombre de quantiles maximal pour une colonne peut être spécifié lors de l'exécution de l'utilitaire RUNSTATS.

  • Les statistiques de distribution sont collectées pour les index sur données XML de type VARCHAR, DOUBLE, TIMESTAMP et DATE. Les statistiques de distribution XML ne sont pas collectées pour les index sur données XML de type VARCHAR HASHED.
  • Les statistiques de distribution XML sont collectées lorsque des opérations de table automatiques RUNSTATS sont effectuées.
  • Les statistiques de distribution XML ne sont pas créées lors du chargement de données avec l'option STATISTICS.
  • Les statistiques de distribution XML ne sont pas collectées pour les index partitionnés sur les données XML définies sur une table partitionnée.
Remarque: La plupart des statistiques de colonne XML ne sont pas stockées dans les tables du catalogue système, mais dans le descripteur condensé de la table de la colonne. Pour afficher les statistiques XML dans le descripteur condensé, utilisez db2cat.
L'utilitaire runstats collecte les informations suivantes sur les groupes de colonnes:
  • Nom basé sur l'horodatage pour le groupe de colonnes
  • Cardinalité du groupe de colonnes
L'utilitaire runstats collecte les informations suivantes sur les index:
  • Nombre d'entrées d'index ( cardinalité d'index)
  • Nombre de pages élémentaires
  • Nombre de niveaux d'index
  • Degré de mise en cluster des données de table dans l'index
  • Degré de mise en cluster des clés d'index par rapport aux partitions de données
  • Rapport entre le nombre de pages élémentaires situées sur le disque dans l'ordre des clés d'index et le nombre de pages de la plage de pages occupées par l'index
  • Nombre de valeurs distinctes contenues dans la première colonne de l'index
  • Nombre de valeurs distinctes contenues dans les deux, trois et quatre premières colonnes de l'index
  • Nombre de valeurs distinctes contenues dans toutes les colonnes de l'index
  • Nombre de pages élémentaires situées sur le disque dans l'ordre des clés d'index, avec peu ou pas d'écarts importants entre elles
  • Taille moyenne de la clé feuille, sans colonnes d'inclusion
  • Taille moyenne de la clé feuille, avec les colonnes d'inclusion
  • Nombre de pages sur lesquelles tous les identificateurs d'enregistrement (RID) sont marqués comme supprimés
  • Nombre de RID marqués comme supprimés sur les pages où tous les RID ne sont pas marqués comme supprimés
Si vous demandez des statistiques d'index détaillées, des informations supplémentaires sur le degré de mise en cluster des données de table dans l'index et les estimations d'extraction de page pour les différentes tailles de mémoire tampon sont collectées.

Pour un index partitionné, ces statistiques sont représentatives d'une partition d'index unique, à l'exception des valeurs distinctes de la première colonne de l'index, des deux, trois et quatre premières colonnes de l'index et de toutes les colonnes de l'index. Les statistiques par partition d'index sont également collectées afin de déterminer si une partition d'index doit être réorganisée.

La collecte de statistiques invalide les instructions dynamiques mises en cache qui référencent les tables pour lesquelles des statistiques ont été collectées. Cela permet d'optimiser à nouveau les instructions dynamiques mises en cache avec les statistiques les plus récentes.