Statistieken in Fabric-datawarehousing
Van toepassing op:✅ SQL Analytics-eindpunt en -magazijn in Microsoft Fabric
Het warehouse in Microsoft Fabric maakt gebruik van een query-engine om een uitvoeringsplan voor een bepaalde SQL-query te maken. Wanneer u een query verzendt, probeert de queryoptimalisatie alle mogelijke plannen op te sommen en de meest efficiënte kandidaat te kiezen. Om te bepalen welk plan de minste overhead (I/O, CPU, geheugen) vereist, moet de engine de hoeveelheid werk of rijen kunnen evalueren die bij elke operator kunnen worden verwerkt. Vervolgens kiest het op basis van de kosten van elk abonnement het abonnement met de minste hoeveelheid geschatte hoeveelheid werk. Statistieken zijn objecten die relevante informatie over uw gegevens bevatten, zodat queryoptimalisatie deze kosten kan schatten.
Statistieken gebruiken
Om optimale queryprestaties te bereiken, is het belangrijk dat u nauwkeurige statistieken hebt. Microsoft Fabric ondersteunt momenteel de volgende paden om relevante en actuele statistieken te bieden:
- Door de gebruiker gedefinieerde statistieken
- De gebruiker maakt handmatig gebruik van DDL-syntaxis (Data Definition Language) om naar behoefte statistieken te maken, bij te werken en neer te zetten
- Automatische statistieken
- Engine maakt en onderhoudt automatisch statistieken tijdens querytime
Handmatige statistieken voor alle tabellen
De traditionele optie voor het onderhouden van de status van statistieken is beschikbaar in Microsoft Fabric. Gebruikers kunnen op histogram gebaseerde statistieken met één kolom maken, bijwerken en verwijderen met RESPECTIEVELIJK CREATE STATISTICS, UPDATE STATISTICS en DROP STATISTICS. Gebruikers kunnen ook de inhoud van op histogram gebaseerde statistieken met één kolom bekijken met DBCC-SHOW_STATISTICS. Op dit moment wordt een beperkte versie van deze instructies ondersteund.
- Als u handmatig statistieken maakt, kunt u zich richten op kolommen die sterk worden gebruikt in uw queryworkload (met name in GROEP-BY's, ORDER-BY's, filters en JOIN's).
- Overweeg regelmatig statistieken op kolomniveau bij te werken nadat gegevens zijn gewijzigd die het aantal rijen of distributie van de gegevens aanzienlijk wijzigen.
Voorbeelden van handmatig onderhoud van statistieken
Als u statistieken wilt maken voor de dbo.DimCustomer
tabel, op basis van alle rijen in een kolom CustomerKey
:
CREATE STATISTICS DimCustomer_CustomerKey_FullScan
ON dbo.DimCustomer (CustomerKey) WITH FULLSCAN;
Als u het statistiekenobject DimCustomer_CustomerKey_FullScan
handmatig wilt bijwerken, bijvoorbeeld na een grote gegevensupdate:
UPDATE STATISTICS dbo.DimCustomer (DimCustomer_CustomerKey_FullScan) WITH FULLSCAN;
Informatie over het statistiekenobject weergeven:
DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan");
Als u alleen informatie wilt weergeven over het histogram van het statistiekenobject:
DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan") WITH HISTOGRAM;
Het statistiekenobject DimCustomer_CustomerKey_FullScan
handmatig verwijderen:
DROP STATISTICS dbo.DimCustomer.DimCustomer_CustomerKey_FullScan;
De volgende T-SQL-objecten kunnen ook worden gebruikt om zowel handmatig gemaakte als automatisch gemaakte statistieken in Microsoft Fabric te controleren:
- catalogusweergave sys.stats
- sys.stats_columns catalogusweergave
- STATS_DATE systeemfunctie
Automatische statistieken bij query
Wanneer u een query uitvoert en queryoptimalisatie statistieken vereist voor planverkenning, worden deze statistieken automatisch gemaakt in Microsoft Fabric als deze nog niet bestaan. Zodra statistieken zijn gemaakt, kan de queryoptimalisatie deze gebruiken bij het schatten van de plankosten van de activerende query. Bovendien worden deze statistieken automatisch vernieuwd als de query-engine bepaalt dat bestaande statistieken die relevant zijn voor query's niet meer nauwkeurig overeenkomen met de gegevens. Omdat deze automatische bewerkingen synchroon worden uitgevoerd, kunt u verwachten dat de queryduur deze tijd opneemt als de benodigde statistieken nog niet bestaan of belangrijke gegevenswijzigingen zijn aangebracht sinds de laatste vernieuwing van de statistieken.
Automatische statistieken controleren tijdens querytime
Er zijn verschillende gevallen waarin u een bepaald type automatische statistieken kunt verwachten. De meest voorkomende zijn op histogram gebaseerde statistieken, die worden aangevraagd door de queryoptimalisatie voor kolommen waarnaar wordt verwezen in GROUP BYs, JOINs, DISTINCT-componenten, filters (WHERE-componenten) en ORDER-BY's. Als u bijvoorbeeld het automatisch maken van deze statistieken wilt zien, wordt het maken van een query geactiveerd als er nog geen statistieken COLUMN_NAME
bestaan. Voorbeeld:
SELECT <COLUMN_NAME>
FROM <YOUR_TABLE_NAME>
GROUP BY <COLUMN_NAME>;
In dit geval moet u verwachten dat statistieken COLUMN_NAME
zijn gemaakt. Als de kolom ook een varchar-kolom was, ziet u ook de statistieken over de gemiddelde kolomlengte. Als u wilt valideren dat statistieken automatisch zijn gemaakt, kunt u de volgende query uitvoeren:
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;
U kunt nu de statistics_name
automatisch gegenereerde histogramstatistiek vinden (moet er ongeveer als _WA_Sys_00000007_3B75D760
volgt uitzien) en de volgende T-SQL uitvoeren:
DBCC SHOW_STATISTICS ('<YOUR_TABLE_NAME>', '<statistics_name>');
Voorbeeld:
DBCC SHOW_STATISTICS ('sales.FactInvoice', '_WA_Sys_00000007_3B75D760');
De Updated
waarde in de resultatenset van DBCC SHOW_STATISTICS moet een datum (in UTC) zijn die vergelijkbaar is met toen u de oorspronkelijke GROUP BY-query uitvoerde.
Deze automatisch gegenereerde statistieken kunnen vervolgens worden gebruikt in volgende query's door de query-engine om de kosten van plannen en de efficiëntie van de uitvoering te verbeteren. Als er voldoende wijzigingen optreden in de tabel, worden deze statistieken ook vernieuwd door de query-engine om queryoptimalisatie te verbeteren. Dezelfde vorige voorbeeldoefening kan worden toegepast nadat de tabel aanzienlijk is gewijzigd. In Fabric gebruikt de SQL-query-engine dezelfde drempelwaarde voor opnieuw compileren als SQL Server 2016 (13.x) om statistieken te vernieuwen.
Typen automatisch gegenereerde statistieken
In Microsoft Fabric zijn er meerdere typen statistieken die automatisch door de engine worden gegenereerd om queryplannen te verbeteren. Op dit moment zijn ze te vinden in sys.stats , hoewel niet alle acties kunnen worden uitgevoerd:
- Histogramstatistieken
- Gemaakt per kolom die histogramstatistieken nodig heeft tijdens querytime
- Deze objecten bevatten histogram- en dichtheidsinformatie met betrekking tot de verdeling van een bepaalde kolom. Vergelijkbaar met de statistieken die automatisch worden gemaakt tijdens querytime in toegewezen pools van Azure Synapse Analytics.
- De naam begint met
_WA_Sys_
. - Inhoud kan worden weergegeven met DBCC-SHOW_STATISTICS
- Statistieken voor gemiddelde kolomlengte
- Gemaakt voor variabele tekenkolommen (varchar) die groter zijn dan 100 die een gemiddelde kolomlengte nodig hebben tijdens querytime.
- Deze objecten bevatten een waarde die de gemiddelde rijgrootte van de varchar-kolom aangeeft op het moment van het maken van statistieken.
- De naam begint met
ACE-AverageColumnLength_
. - De inhoud kan niet worden weergegeven en kan niet door de gebruiker worden uitgevoerd.
- Kardinaliteitsstatistieken op basis van tabellen
- Gemaakt per tabel waarvoor kardinaliteitschatting nodig is tijdens querytime.
- Deze objecten bevatten een schatting van het aantal rijen van een tabel.
- Met de naam
ACE-Cardinality
. - De inhoud kan niet worden weergegeven en kan niet door de gebruiker worden uitgevoerd.
Beperkingen
- Alleen histogramstatistieken met één kolom kunnen handmatig worden gemaakt en gewijzigd.
- Het maken van statistieken met meerdere kolommen wordt niet ondersteund.
- Andere statistiekenobjecten kunnen worden weergegeven in sys.stats, afgezien van handmatig gemaakte statistieken en automatisch gemaakte statistieken. Deze objecten worden niet gebruikt voor queryoptimalisatie.