Share via


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:

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 de gegevens 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_FullScanhandmatig 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_FullScanhandmatig 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:

Automatische statistieken bij query

Wanneer u een query en queryoptimalisatie uitvoert, zijn statistieken vereist voor planverkenning, worden deze statistieken automatisch gemaakt als deze nog niet bestaan. Zodra statistieken zijn gemaakt, kan de queryoptimalisatie deze gebruiken bij het schatten van de plankosten van de activerende query. Als de query-engine bovendien vaststelt dat bestaande statistieken die relevant zijn voor query's niet meer nauwkeurig overeenkomen met de gegevens, worden deze statistieken automatisch vernieuwd. 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 
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;

Deze query zoekt alleen naar op kolommen gebaseerde statistieken. Als u alle statistieken voor deze tabel wilt zien, verwijdert u de JOIN's op sys.stats_columns en sys.columns.

U kunt nu de statistics_name automatisch gegenereerde histogramstatistiek vinden (moet er ongeveer als _WA_Sys_00000007_3B75D760volgt 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.