Statistieken

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 geschatte hoeveelheid werk. Statistieken zijn objecten die relevante informatie over uw gegevens bevatten, zodat de queryoptimalisator 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 manieren om relevante en actuele statistieken te bieden:

Handmatige statistieken voor alle tabellen

De traditionele optie voor het onderhouden van de gezondheid van statistieken is beschikbaar in Microsoft Fabric. Gebruikers kunnen op histogram gebaseerde statistieken met één kolom maken, bijwerken en verwijderen met CREATE STATISTICS, UPDATE STATISTICS en DROP STATISTICS, respectievelijk. 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 verklaringen ondersteund.

  • Als u handmatig statistieken maakt, kunt u zich richten op kolommen die sterk worden gebruikt in uw queryworkload (met name in GROUP BY's, ORDER BY's, filters en JOIN's).
  • Overweeg regelmatig statistieken op kolomniveau bij te werken na gegevenswijzigingen die het aantal rijen of de gegevensverdeling aanzienlijk veranderen.

Voorbeelden van handmatig statistiekonderhoud

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_FullScan handmatig droppen:

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 voor query's

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 query-optimizer deze gebruiken bij het schatten van de kosten van het uitvoeringsplan van de activerende query. Bovendien worden deze statistieken automatisch vernieuwd als de query-engine bepaalt dat bestaande statistieken die relevant zijn voor de query 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 bij querytime

Er zijn verschillende gevallen waarin u een bepaald type automatische statistieken kunt verwachten. De meest voorkomende zijn op histogrammen gebaseerde statistieken, die worden aangevraagd door de queryoptimizer voor kolommen waarnaar wordt verwezen in GROUP BY’s, JOINs, DISTINCT-clausules, filters (WHERE-clausules) en ORDER BY’s. Als u bijvoorbeeld het automatisch maken van deze statistieken wilt zien, activeert een query de aanmaak als er nog geen statistieken voor COLUMN_NAME bestaan. Voorbeeld:

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

In dit geval moet u verwachten dat de statistieken voor COLUMN_NAME zijn aangemaakt. Als de kolom ook een varchar-kolom was, zou u ook de statistieken over de gemiddelde kolomlengte aangemaakt zien. Als u wilt valideren of statistieken automatisch zijn aangemaakt, 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_namenaam van de automatisch gegenereerde histogramstatistiek vinden (moet er ongeveer als _WA_Sys_00000007_3B75D760 uitzien) en de volgende T-SQL uitvoeren:

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

Bijvoorbeeld:

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 queryengine om de plankostenschatting 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 eerdere 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 ze niet allemaal bruikbaar zijn:

  • 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 dedicated SQL-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) groter dan 100 waarvoor tijdens querytime een gemiddelde kolomlengte nodig is.
    • 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 bewerkt.
  • Kardinaliteitsstatistieken op basis van tabellen
    • Aangemaakt voor elke tabel waarvoor tijdens querytijd een kardinaliteitsschatting nodig is, alleen als andere metadata over het aantal rijen niet beschikbaar is.
      • Deze objecten bevatten een schatting van het aantal rijen van een tabel.
      • Genaamd ACE-Cardinality.
      • De inhoud kan niet worden weergegeven en de gebruiker kan er geen actie op uitvoeren.

Ingebouwde optimalisaties binnen Fabric-statistieken

Vernieuwen van incrementele statistieken

Incrementeel vernieuwen van statistieken is een prestatieverbetering voor automatische updates van kolomstatistieken.

Wanneer de statistiek van een kolom automatisch wordt vernieuwd, moet een steekproef van de hele kolom worden gescand om de statistiek bij te werken. Deze functie versnelt deze bewerkingen indien mogelijk door alleen steekproeven te nemen die sinds de laatste vernieuwing zijn toegevoegd en die gegevens samen te voegen met bestaande histogrammen.

Wanneer de engine een update voor een kolomstatistiek aanvraagt, wordt automatisch bepaald of deze snellere vernieuwingsmethode kan worden gebruikt. Incrementele updates van statistieken zijn meestal voordelig voor grotere tabellen die voornamelijk INSERT-activiteiten hebben gehad sinds de laatste vernieuwing van de statistieken.

Proactieve statistieken vernieuwen

Proactief vernieuwen van statistieken is een volledig beheerd proces dat probeert om statistieken te frontloaden nadat de gegevens zijn gewijzigd.

Deze optimalisatie is bedoeld om de kans te verminderen dat een SELECT query vertraging ondervindt die wordt veroorzaakt door updates van statistieken tijdens het genereren van queryplannen.

Proactieve updates van statistieken zijn alleen van invloed op automatisch gegenereerde histogramstatistieken, die met de door het systeem gegenereerde naamconventie, van _WA_Sys_.

De functie voor proactief vernieuwen van statistieken is standaard ingeschakeld, maar kan worden geconfigureerd met de opdracht ALTER DATABASE T-SQL.

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 voorkomen in sys.stats, afgezien van handmatig gemaakte statistieken en automatisch gemaakte statistieken. Deze objecten worden niet gebruikt voor queryoptimalisatie.