Statistikk i datalager for stoff

Gjelder for: SQL Analytics-endepunkt og Warehouse i Microsoft Fabric

Lageret i Microsoft Fabric bruker en spørringsmotor til å opprette en utførelsesplan for en gitt SQL-spørring. Når du sender inn en spørring, prøver spørringsoptimaliseringen å nummerere alle mulige planer og velge den mest effektive kandidaten. For å finne ut hvilken plan som krever minst indirekte kostnader (I/U, CPU, minne), må motoren kunne evaluere mengden arbeid eller rader som kan behandles hos hver operator. Deretter, basert på hver plankostnad, velger den den med minst beregnet arbeid. Statistikk er objekter som inneholder relevant informasjon om dataene, slik at spørringsoptimalisering kan beregne disse kostnadene.

Slik drar du nytte av statistikk

For å oppnå optimal spørringsytelse er det viktig å ha nøyaktig statistikk. Microsoft Fabric støtter for øyeblikket følgende baner for å gi relevant og oppdatert statistikk:

  • Brukerdefinert statistikk
  • Automatisk statistikk

Manuell statistikk for alle tabeller

Det tradisjonelle alternativet for å opprettholde statistikktilstand er tilgjengelig i Microsoft Fabric. Brukere kan opprette, oppdatere og slippe histogrambasert enkeltkolonnestatistikk med henholdsvis CREATE STATISTICS, UPDATE STATISTICS og DROP STATISTICS. Brukere kan også vise innholdet i histogrambasert enkeltkolonnestatistikk med DBCC-SHOW_STATISTICS. For øyeblikket støttes en begrenset versjon av disse setningene.

  • Hvis du oppretter statistikk manuelt, bør du vurdere å fokusere på de som er mye brukt i spørringens arbeidsbelastning (spesielt i GROUP BYs, ORDER BYs, filters og JOINs).
  • Vurder å oppdatere statistikk på kolonnenivå regelmessig etter dataendringer som endrer radtelling eller distribusjon av dataene betraktelig.

Eksempler på manuell vedlikehold av statistikk

Slik oppretter du statistikk i tabellen dbo.DimCustomer basert på alle radene i en kolonne CustomerKey:

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

Hvis du vil oppdatere statistikkobjektet DimCustomer_CustomerKey_FullScanmanuelt , kanskje etter en stor dataoppdatering:

UPDATE STATISTICS dbo.DimCustomer (DimCustomer_CustomerKey_FullScan) WITH FULLSCAN;  

Slik viser du informasjon om statistikkobjektet:

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

Slik viser du bare informasjon om histogrammet for statistikkobjektet:

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

Slik slipper du statistikkobjektet DimCustomer_CustomerKey_FullScanmanuelt:

DROP STATISTICS dbo.DimCustomer.DimCustomer_CustomerKey_FullScan;

Følgende T-SQL-objekter kan også brukes til å kontrollere både manuelt opprettet og automatisk opprettet statistikk i Microsoft Fabric:

Automatisk statistikk ved spørring

Når du utsteder en spørrings- og spørringsoptimalisering krever statistikk for planutforskning, oppretter Microsoft Fabric automatisk denne statistikken hvis de ikke allerede finnes. Når statistikk er opprettet, kan spørringsoptimalisering bruke dem til å estimere plankostnadene for utløserspørringen. I tillegg, hvis spørringsmotoren bestemmer at eksisterende statistikk som er relevant for spørring, ikke lenger gjenspeiler dataene nøyaktig, oppdateres denne statistikken automatisk. Fordi disse automatiske operasjonene utføres synkront, kan du forvente at spørringsvarigheten inkluderer denne gangen hvis den nødvendige statistikken ennå ikke finnes, eller betydelige dataendringer har skjedd siden forrige statistikkoppdatering.

Bekreft automatisk statistikk ved spørringstid

Det finnes ulike tilfeller der du kan forvente en eller annen type automatisk statistikk. De vanligste er histogrambasert statistikk, som er forespurt av spørringsoptimalisering for kolonner som det refereres til i GROUP BYs, JOINs, DISTINCT-setninger, filtre (WHERE-setninger) og ORDER BYs. Hvis du for eksempel vil se automatisk oppretting av denne statistikken, vil en spørring utløse oppretting hvis statistikk for COLUMN_NAME ikke finnes ennå. Eksempel:

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

I dette tilfellet bør du forvente at statistikken for COLUMN_NAME å ha blitt opprettet. Hvis kolonnen også var en varchar-kolonne, vil du også se gjennomsnittlig kolonnelengdestatistikk opprettet. Hvis du vil validere at statistikk ble opprettet automatisk, kan du kjøre følgende spørring:

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 spørringen ser bare etter kolonnebasert statistikk. Hvis du vil se all statistikk som finnes for denne tabellen, fjerner du JOIN-ene på sys.stats_columns og sys.columns.

Nå kan du finne den statistics_name automatisk genererte histogramstatistikken (bør være omtrent som _WA_Sys_00000007_3B75D760) og kjøre følgende T-SQL:

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

Eksempel:

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

Verdien Updated i resultatsettet med DBCC-SHOW_STATISTICS skal være en dato (i UTC) lik da du kjørte den opprinnelige GROUP BY-spørringen.

Disse automatisk genererte statistikkene kan deretter utnyttes i etterfølgende spørringer av spørringsmotoren for å forbedre planens kostnads- og utførelseseffektivitet. Hvis det skjer nok endringer i tabellen, oppdaterer spørringsmotoren også denne statistikken for å forbedre spørringsoptimaliseringen. Den samme tidligere eksempeløvelsen kan brukes etter å ha endret tabellen betraktelig. I Fabric bruker SQL-spørringsmotoren den samme rekompileringsterskelen som SQL Server 2016 (13.x) til å oppdatere statistikk.

Typer automatisk generert statistikk

I Microsoft Fabric finnes det flere typer statistikker som genereres automatisk av motoren for å forbedre spørringsplaner. For øyeblikket kan de bli funnet i sys.stats selv om ikke alle er gjennomførbare:

  • Histogramstatistikk
    • Opprettet per kolonne som trenger histogramstatistikk ved spørringstid
    • Disse objektene inneholder histogram- og tetthetsinformasjon om fordelingen av en bestemt kolonne. På samme måte som statistikken som opprettes automatisk ved spørretid i dedikerte utvalg for Azure Synapse Analytics.
    • Navnet begynner med _WA_Sys_.
    • Innholdet kan vises med DBCC-SHOW_STATISTICS
  • Statistikk for gjennomsnittlig kolonnelengde
    • Opprettet for kolonner med variabelt tegn (varchar) større enn 100 som trenger gjennomsnittlig kolonnelengde ved spørringstid.
    • Disse objektene inneholder en verdi som representerer den gjennomsnittlige radstørrelsen for varchar-kolonnen på tidspunktet for oppretting av statistikk.
    • Navnet begynner med ACE-AverageColumnLength_.
    • Innholdet kan ikke vises og kan ikke redigeres av brukeren.
  • Tabellbasert kardinalitetsstatistikk
    • Opprettet per tabell som trenger kardinalitetsestimering ved spørringstid.
    • Disse objektene inneholder et estimat av radtellingen for en tabell.
    • Navngitt ACE-Cardinality.
    • Innholdet kan ikke vises og kan ikke redigeres av brukeren.

Begrensninger

  • Bare histogramstatistikk med én kolonne kan opprettes og endres manuelt.
  • Oppretting av statistikk med flere kolonner støttes ikke.
  • Andre statistikkobjekter kan vises i sys.stats, bortsett fra manuelt opprettet statistikk og automatisk opprettet statistikk. Disse objektene brukes ikke til spørringsoptimalisering.