Statistik i Fabric-datawarehousing

Gælder for: SQL Analytics-slutpunkt og warehouse i Microsoft Fabric

Lageret i Microsoft Fabric bruger et forespørgselsprogram til at oprette en udførelsesplan for en given SQL-forespørgsel. Når du sender en forespørgsel, forsøger forespørgselsoptimeringsprogrammet at optælle alle mulige planer og vælge den mest effektive kandidat. For at afgøre, hvilken plan der kræver mindst omkostninger (I/O, CPU, hukommelse), skal programmet kunne evaluere mængden af arbejde eller rækker, der kan behandles på hver operator. Derefter vælger den på baggrund af de enkelte planers omkostninger den med den mindste mængde anslået arbejde. Statistik er objekter, der indeholder relevante oplysninger om dine data, for at give forespørgselsoptimering mulighed for at estimere disse omkostninger.

Sådan udnytter du statistikker

For at opnå optimal forespørgselsydeevne er det vigtigt at have nøjagtige statistikker. Microsoft Fabric understøtter i øjeblikket følgende stier til at levere relevante og opdaterede statistikker:

Manuel statistik for alle tabeller

Den traditionelle mulighed for at vedligeholde statistiktilstand er tilgængelig i Microsoft Fabric. Brugerne kan oprette, opdatere og slippe histogrammebaserede statistikker med en enkelt kolonne med henholdsvis CREATE STATISTICS, UPDATE STATISTICS og DROP STATISTICS. Brugerne kan også få vist indholdet af histogrammebaseret statistik med en enkelt kolonne med DBCC-SHOW_STATISTICS. I øjeblikket understøttes en begrænset version af disse udsagn.

  • Hvis du opretter statistikker manuelt, kan du overveje at fokusere på dem, der er meget brugt i din forespørgselsarbejdsbelastning (især i GRUPPE BY'er, ORDER BYs, filtre og JOIN'er).
  • Overvej at opdatere statistik på kolonneniveau regelmæssigt, når dataændringer, der ændrer rækkeantal eller distribution af dataene markant, ændres.

Eksempler på manuel vedligeholdelse af statistikker

Sådan opretter du statistikker for tabellen dbo.DimCustomer baseret på alle rækkerne i en kolonne CustomerKey:

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

Sådan opdaterer du statistikobjektet DimCustomer_CustomerKey_FullScanmanuelt , måske efter en stor dataopdatering:

UPDATE STATISTICS dbo.DimCustomer (DimCustomer_CustomerKey_FullScan) WITH FULLSCAN;  

Sådan får du vist oplysninger om statistikobjektet:

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

Sådan får du kun vist oplysninger om histogrammet for statistikobjektet:

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

Sådan slipper du statistikobjektet DimCustomer_CustomerKey_FullScanmanuelt:

DROP STATISTICS dbo.DimCustomer.DimCustomer_CustomerKey_FullScan;

Følgende T-SQL-objekter kan også bruges til at kontrollere både manuelt oprettede og automatisk oprettede statistikker i Microsoft Fabric:

Automatisk statistik ved forespørgsel

Når du udsteder en forespørgsel og forespørgselsoptimering kræver statistik til udforskning af planer, opretter Microsoft Fabric automatisk disse statistikker, hvis de ikke allerede findes. Når der er oprettet statistikker, kan forespørgselsoptimering bruge dem til at vurdere planomkostningerne for den udløsende forespørgsel. Hvis forespørgselsprogrammet desuden bestemmer, at eksisterende statistikker, der er relevante for forespørgslen, ikke længere afspejler dataene nøjagtigt, opdateres disse statistikker automatisk. Da disse automatiske handlinger udføres synkront, kan du forvente, at forespørgslens varighed inkluderer denne tid, hvis de nødvendige statistikker endnu ikke findes, eller hvis der er sket betydelige dataændringer siden den seneste opdatering af statistikkerne.

Kontrollér automatisk statistik på forespørgselstidspunktet

Der er forskellige tilfælde, hvor du kan forvente en form for automatisk statistik. De mest almindelige er histogrammebaserede statistikker, som forespørgselsoptimeringsprogrammet anmoder om for kolonner, der refereres til i GROUP BYs, JOIN'er, DISTINCT-delsætninger, filtre (WHERE-delsætninger) og ORDER BYs. Hvis du f.eks. vil se den automatiske oprettelse af disse statistikker, udløser en forespørgsel oprettelse, hvis der endnu ikke findes statistik for COLUMN_NAME . Eksempler:

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

I dette tilfælde skal du forvente, at der er oprettet statistikker for COLUMN_NAME . Hvis kolonnen også er en varchar-kolonne, kan du også se, at der er oprettet statistik for den gennemsnitlige kolonnelængde. Hvis du vil validere, at statistikkerne blev oprettet automatisk, kan du køre følgende forespørgsel:

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;

Denne forespørgsel søger kun efter kolonnebaserede statistikker. Hvis du vil se alle statistikker, der findes for denne tabel, skal du fjerne JOID'erne på sys.stats_columns og sys.columns.

Nu kan du finde den statistics_name automatisk genererede histogramstatistik (skal være noget i stil _WA_Sys_00000007_3B75D760med ) og køre følgende T-SQL:

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

Eksempler:

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

Værdien Updated i resultatsættet for DBCC-SHOW_STATISTICS skal være en dato (i UTC), der svarer til, da du kørte den oprindelige GROUP BY-forespørgsel.

Disse automatisk genererede statistikker kan derefter udnyttes i efterfølgende forespørgsler af forespørgselsprogrammet for at forbedre omkostnings- og udførelseseffektiviteten af planen. Hvis der sker nok ændringer i tabellen, opdaterer forespørgselsprogrammet også disse statistikker for at forbedre forespørgselsoptimeringen. Den samme tidligere eksempeløvelse kan anvendes, når du har ændret tabellen markant. I Fabric bruger SQL-forespørgselsprogrammet den samme kompileringsgrænse som SQL Server 2016 (13.x) til at opdatere statistikker.

Typer af automatisk genereret statistik

I Microsoft Fabric er der flere typer statistikker, der genereres automatisk af programmet for at forbedre forespørgselsplanerne. I øjeblikket kan de findes i sys.stats , selvom ikke alle er handlingsvenlige:

  • Statistik for histogram
    • Oprettet pr. kolonne, der skal bruge histogrammestatistik på forespørgselstidspunktet
    • Disse objekter indeholder histogrammer og tæthedsoplysninger om distributionen af en bestemt kolonne. Svarer til den statistik, der automatisk oprettes på forespørgselstidspunktet i dedikerede Azure Synapse Analytics-puljer.
    • Navnet begynder med _WA_Sys_.
    • Indhold kan ses med DBCC-SHOW_STATISTICS
  • Statistik for gennemsnitlig kolonnelængde
    • Oprettet for kolonner med variabeltegn (varchar), der er større end 100, og som skal have den gennemsnitlige kolonnelængde på forespørgselstidspunktet.
    • Disse objekter indeholder en værdi, der repræsenterer den gennemsnitlige rækkestørrelse for kolonnen varchar på tidspunktet for oprettelsen af statistikker.
    • Navnet begynder med ACE-AverageColumnLength_.
    • Indholdet kan ikke vises og kan ikke redigeres af brugeren.
  • Tabelbaseret kardinalitetsstatistik
    • Oprettet pr. tabel med behov for kardinalitetsestimering på forespørgselstidspunktet.
    • Disse objekter indeholder et estimat over rækkeantallet for en tabel.
    • Navngivet ACE-Cardinality.
    • Indholdet kan ikke vises og kan ikke redigeres af brugeren.

Begrænsninger

  • Det er kun histogrammer med en enkelt kolonne, der kan oprettes og ændres manuelt.
  • Statistikoprettelse med flere kolonner understøttes ikke.
  • Andre statistikobjekter kan blive vist i sys.stats, bortset fra manuelt oprettede statistikker og automatisk oprettede statistikker. Disse objekter bruges ikke til forespørgselsoptimering.