Statistiques dans l’entreposage de données Fabric

S’applique à : Point de terminaison SQL et entrepôt dans Microsoft Fabric

L’entrepôt dans Microsoft Fabric utilise un moteur de requête pour créer un plan d’exécution pour une requête SQL donnée. Lorsque vous envoyez une requête, l’optimiseur de requête tente d’énumérer tous les plans possibles et de choisir le candidat le plus efficace. Pour déterminer quel plan nécessiterait le moins de surcharge (E/S et mémoire), le moteur doit être en mesure d’évaluer la quantité de travail ou de lignes qui peuvent être traitées à chaque opérateur. Ensuite, en fonction du coût de chaque plan, il choisit celui qui a le moins de travail estimé. Les statistiques sont des objets qui contiennent des informations pertinentes sur vos données, pour permettre à l’optimiseur de requête d’estimer ces coûts.

Important

Microsoft Fabric est en préversion.

Comment tirer parti des statistiques

Pour obtenir des performances de requête optimales, il est important d’avoir des statistiques précises. Microsoft Fabric prend actuellement en charge les chemins d’accès suivants pour fournir des statistiques pertinentes et à jour :

Statistiques manuelles pour toutes les tables

L’option traditionnelle de maintien de l’intégrité des statistiques est disponible dans Microsoft Fabric. Les utilisateurs peuvent créer, mettre à jour et supprimer des statistiques à colonne unique basées sur un histogramme avec CREATE STATISTICS, UPDATE STATISTICS et DROP STATISTICS, respectivement. Les utilisateurs peuvent également afficher le contenu des statistiques à colonne unique basées sur un histogramme avec dbCC SHOW_STATISTICS. Actuellement, une version limitée de ces instructions est prise en charge.

  • Si vous créez manuellement des statistiques, envisagez de vous concentrer sur celles qui sont fortement utilisées dans votre charge de travail de requête (en particulier dans LES GROUPES BY, les BYs ORDER, les filtres et les JOIN).
  • Envisagez de mettre à jour régulièrement les statistiques au niveau des colonnes après des modifications de données qui modifient considérablement le nombre de lignes ou la distribution des données.

Exemples de maintenance manuelle des statistiques

Pour créer des statistiques sur la dbo.DimCustomer table, en fonction de toutes les lignes d’une colonne CustomerKey:

CREATE STATISTICS DimCustomer_CustomerKey_FullScan
ON dbo.DimCustomer (CustomerKey) WITH FULLSCAN;

Pour mettre à jour manuellement l’objet DimCustomer_CustomerKey_FullScande statistiques , peut-être après une mise à jour de données volumineuse :

UPDATE STATISTICS DimCustomer_CustomerKey_FullScan (CustomerKey) WITH FULLSCAN;  

Pour afficher des informations sur l’objet de statistiques :

DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan");

Pour afficher uniquement des informations sur l’histogramme de l’objet de statistiques :

DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan") WITH HISTOGRAM;

Pour supprimer manuellement l’objet DimCustomer_CustomerKey_FullScande statistiques :

DROP STATISTICS dbo.DimCustomer.DimCustomer_CustomerKey_FullScan;

Les objets T-SQL suivants peuvent également être utilisés pour case activée à la fois des statistiques créées manuellement et créées automatiquement dans Microsoft Fabric :

Statistiques automatiques à la requête

Chaque fois que vous émettez un optimiseur de requête et nécessite des statistiques pour l’exploration de plan, Microsoft Fabric crée automatiquement ces statistiques si elles n’existent pas déjà. Une fois les statistiques créées, l’optimiseur de requête peut les utiliser pour estimer les coûts de plan de la requête de déclenchement. Étant donné que cette création est effectuée de manière synchrone, vous pouvez vous attendre à ce que la première exécution de requête inclue cette heure de création de statistiques.

Pour vérifier la création automatique des statistiques au moment de la requête

Il existe différents cas où vous pouvez vous attendre à la création automatique d’un type de statistiques. Les plus courantes sont les statistiques système basées sur l’histogramme, qui sont souvent créées pour les colonnes référencées dans group BYs, JOINs, clauses DISTINCT, filtres (clauses WHERE) et BYs ORDER. Par exemple, si vous souhaitez voir la création automatique de ces statistiques, une requête déclenche la création si les statistiques pour n’existent COLUMN_NAME pas encore. Par exemple :

SELECT <COLUMN_NAME>
FROM <YOUR_TABLE_NAME>
GROUP BY <COLUMN_NAME>;

Dans ce cas, vous devez vous attendre à ce que des statistiques pour COLUMN_NAME aient été créées. Si la colonne était également une colonne varchar, vous voyez également des statistiques de longueur moyenne de colonne créées. Si vous souhaitez vérifier que les statistiques ont été créées automatiquement, vous pouvez exécuter la requête suivante :

select
    object_name(s.object_id) AS [object_name],
    c.name AS [column_name],
    s.name AS [stats_name],
    s.stats_id,
    STATS_DATE(s.object_id, s.stats_id) AS [stats_update_date], 
    s.auto_created,
    s.user_created,
    s.stats_generation_method_desc 
FROM sys.stats AS s 
INNER JOIN sys.objects AS o 
ON o.object_id = s.object_id 
INNER JOIN sys.stats_columns AS sc 
ON s.object_id = sc.object_id 
AND s.stats_id = sc.stats_id 
INNER JOIN sys.columns AS c 
ON sc.object_id = c.object_id 
AND c.column_id = sc.column_id
WHERE o.type = 'U' -- Only check for stats on user-tables
    AND s.auto_created = 1
    AND o.name = '<YOUR_TABLE_NAME>'
ORDER BY object_name, column_name;

Cette requête recherche uniquement des statistiques basées sur des colonnes. Si vous souhaitez voir toutes les statistiques qui existent pour cette table, supprimez les JOIN sur sys.stats_columns et sys.columns.

À présent, vous pouvez trouver la statistics_name statistique de l’histogramme généré automatiquement (qui doit ressembler _WA_Sys_00000007_3B75D760à ) et exécuter le T-SQL suivant :

DBCC SHOW_STATISTICS ('<YOUR_TABLE_NAME>', '<statistics_name>');

Par exemple :

DBCC SHOW_STATISTICS ('sales.FactInvoice', '_WA_Sys_00000007_3B75D760');

La Updated valeur dans le jeu de résultats de DBCC SHOW_STATISTICS doit être une date (en UTC) similaire à celle de l’exécution de la requête GROUP BY d’origine.

Notes

Actuellement, Microsoft Fabric ne prend pas en charge la mise à jour automatique des statistiques au moment de la requête.

Types de statistiques générées automatiquement

Dans Microsoft Fabric, plusieurs types de statistiques sont générés automatiquement par le moteur pour améliorer les plans de requête. Actuellement, ils peuvent être trouvés dans sys.stats , même si tous ne peuvent pas être actionnables :

  • Statistiques d’histogramme
    • Créé par colonne nécessitant des statistiques d’histogramme au moment de la requête
    • Ces objets contiennent des informations d’histogramme et de densité concernant la distribution d’une colonne particulière. Semblable aux statistiques créées automatiquement au moment de la requête dans les pools dédiés Azure Synapse Analytics.
    • Le nom commence _WA_Sys_par .
    • Le contenu peut être consulté avec DBCC SHOW_STATISTICS
  • Statistiques de longueur moyenne de colonne
    • Créé pour les colonnes de caractères (char et varchar) nécessitant une longueur moyenne de colonne au moment de la requête.
    • Ces objets contiennent une valeur représentant la taille moyenne des lignes de la colonne varchar au moment de la création des statistiques.
    • Le nom commence ACE-AverageColumnLength_par .
    • Le contenu ne peut pas être consulté et ne peut pas être consulté par l’utilisateur.
  • Statistiques de cardinalité basées sur des tables
    • Créé par table nécessitant une estimation de cardinalité au moment de la requête.
    • Ces objets contiennent une estimation du nombre de lignes d’une table.
    • Nommé ACE-Cardinality.
    • Le contenu ne peut pas être consulté et ne peut pas être consulté par l’utilisateur.

Limites

  • Seules les statistiques d’histogramme à colonne unique peuvent être créées et modifiées manuellement.
  • La création de statistiques sur plusieurs colonnes n’est pas prise en charge.
  • D’autres objets de statistiques peuvent s’afficher sous sys.stats à l’exception des statistiques créées manuellement et des statistiques créées automatiquement. Ces objets ne sont pas utilisés pour l’optimisation des requêtes.

Étapes suivantes