Statistiques dans l’entrepôt de données Fabric
S’applique à :✅ point de terminaison d’analytique 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, processeur, mémoire), le moteur doit être en mesure d’évaluer la quantité de travail ou de lignes pouvant ê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.
Comment utiliser 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 définies par l’utilisateur
- L’utilisateur utilise manuellement la syntaxe de langage de définition de données (DDL) pour créer, mettre à jour et supprimer des statistiques selon les besoins
- Statistiques automatiques
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 basées sur un histogramme unique avec CREATE STATISTICS, UPDATE STATISTICS et DROP STATISTICS, respectivement. Les utilisateurs peuvent également afficher le contenu des statistiques basées sur une seule colonne 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 des statistiques manuellement, envisagez de vous concentrer sur les colonnes qui sont fortement utilisées dans votre charge de travail de requête (en particulier dans GROUP BY, ORDER BY, 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_FullScan
de statistiques , peut-être après une mise à jour de données volumineuse :
UPDATE STATISTICS dbo.DimCustomer (DimCustomer_CustomerKey_FullScan) 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 de statistiquesDimCustomer_CustomerKey_FullScan
:
DROP STATISTICS dbo.DimCustomer.DimCustomer_CustomerKey_FullScan;
Les objets T-SQL suivants peuvent également être utilisés pour case activée des statistiques créées manuellement et automatiquement dans Microsoft Fabric :
- sys.stats affichage catalogue
- sys.stats_columns affichage catalogue
- STATS_DATE fonction système
Statistiques automatiques lors de la requête
Chaque fois que vous émettez une requête et que l’optimiseur de requête nécessite des statistiques pour l’exploration du 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. En outre, si le moteur de requête détermine que les statistiques existantes pertinentes pour la requête ne reflètent plus précisément les données, ces statistiques sont automatiquement actualisées. Étant donné que ces opérations automatiques sont effectuées de manière synchrone, vous pouvez vous attendre à ce que la durée de la requête inclue cette durée si les statistiques nécessaires n’existent pas encore ou si des modifications de données significatives se sont produites depuis la dernière actualisation des statistiques.
Vérifier les statistiques automatiques au moment de la requête
Il existe différents cas où vous pouvez vous attendre à un certain type de statistiques automatiques. Les statistiques les plus courantes sont des statistiques basées sur l’histogramme, qui sont demandées par l’optimiseur de requête 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 COLUMN_NAME
n’existent 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 verrez é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
LEFT JOIN sys.stats_columns AS sc
ON s.object_id = sc.object_id
AND s.stats_id = sc.stats_id
LEFT 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;
À présent, vous pouvez trouver le statistics_name
de la statistique d’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 valeur Updated
dans le jeu de résultats de DBCC SHOW_STATISTICS doit être une date (utc) similaire à celle de l’exécution de la requête GROUP BY d’origine.
Ces statistiques générées automatiquement peuvent ensuite être exploitées dans les requêtes suivantes par le moteur de requête pour améliorer le coût du plan et l’efficacité de l’exécution. Si suffisamment de modifications se produisent dans la table, le moteur de requête actualise également ces statistiques pour améliorer l’optimisation des requêtes. Le même exercice précédent peut être appliqué après avoir modifié la table de manière significative. Dans Fabric, le moteur de requête SQL utilise le même seuil de recompilation que SQL Server 2016 (13.x) pour actualiser les statistiques.
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 , bien que tous ne soient pas 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 par
_WA_Sys_
. - Le contenu peut être consulté avec DBCC SHOW_STATISTICS
- Statistiques de longueur moyenne de colonne
- Créé pour les colonnes de caractères variables (varchar) supérieures à 100 nécessitant une longueur moyenne de colonne au moment de la requête.
- Ces objets contiennent une valeur représentant la taille de ligne moyenne de la colonne varchar au moment de la création des statistiques.
- Le nom commence par
ACE-AverageColumnLength_
. - 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 à plusieurs colonnes n’est pas prise en charge.
- D’autres objets statistiques peuvent s’afficher dans sys.stats en dehors des statistiques créées manuellement et des statistiques créées automatiquement. Ces objets ne sont pas utilisés pour l’optimisation des requêtes.