Zdieľať cez


Štatistika skladu údajov v službe Fabric

Vzťahuje sa na:✅ koncový bod analýzy SQL a sklad v službe Microsoft Fabric

Sklad v službe Microsoft Fabric používa nástroj dotazov na vytvorenie plánu vykonávania pre daný dotaz SQL. Keď odošlete dotaz, optimalizátor dotazov sa pokúsi vyčísliť všetky možné plány a vybrať najefektívnejšieho kandidáta. Ak chcete určiť, ktorý plán by si vyžadoval najmenej režijné náklady (I/O, procesor, pamäť), musí byť nástroj schopný vyhodnotiť množstvo práce alebo riadkov, ktoré môžu byť spracované na každom operátore. Na základe nákladov každého plánu potom vyberie ten, ktorý má najmenej odhadovanú prácu. Štatistické údaje sú objekty, ktoré obsahujú relevantné informácie o vašich údajoch, čo optimalizátoru dotazov umožňuje odhadnúť tieto náklady.

Ako využiť štatistiky

Na dosiahnutie optimálneho výkonu dotazu je dôležité mať presné štatistiky. Microsoft Fabric v súčasnosti podporuje nasledujúce cesty k relevantným a aktuálnym štatistikám:

Manuálna štatistika pre všetky tabuľky

V službe Microsoft Fabric je k dispozícii tradičná možnosť uchovávania štatistického stavu. Používatelia môžu vytvárať, aktualizovať a drop histogramom založenú na štatistike jedného stĺpca pomocou možností VYTVORIŤ ŠTATISTIKU, AKTUALIZOVAŤ ŠTATISTIKU A ŠTATISTIKU DROP. Používatelia môžu tiež zobraziť obsah štatistiky jedného stĺpca založenej na histograme pomocou SHOW_STATISTICS DBCC. V súčasnosti je podporovaná obmedzená verzia týchto príkazov.

  • Ak vytvárate štatistiky manuálne, zvážte zameranie na tie, ktoré sa často používajú vo vyťažení dotazov (konkrétne v zoskupených BYs, ORDER BYs, filters a JOIN).
  • Po zmenách údajov, ktoré výrazne zmenia počet riadkov alebo distribúciu údajov, zvážte pravidelnú aktualizáciu štatistiky na úrovni stĺpca.

Príklady manuálnej údržby štatistiky

Ak chcete vytvoriť štatistiku v tabuľke dbo.DimCustomer založenú na všetkých riadkoch v stĺpci CustomerKey:

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

Ak chcete manuálne aktualizovať štatistický objekt DimCustomer_CustomerKey_FullScan, možno po veľkej aktualizácii údajov:

UPDATE STATISTICS dbo.DimCustomer (DimCustomer_CustomerKey_FullScan) WITH FULLSCAN;  

Zobrazenie informácií o objekte štatistiky:

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

Ak chcete zobraziť iba informácie o histograme štatistického objektu:

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

Manuálne zrušenie štatistického objektu DimCustomer_CustomerKey_FullScan:

DROP STATISTICS dbo.DimCustomer.DimCustomer_CustomerKey_FullScan;

Nasledujúce objekty T-SQL možno použiť aj na kontrolu manuálne vytvorených aj automaticky vytvorených štatistík v službe Microsoft Fabric:

Automatická štatistika pri dotaze

Vždy, keď vytvoríte dotaz a optimalizátor dotazov, ktoré si vyžadujú štatistiky na skúmanie plánu, služba Microsoft Fabric tieto štatistiky automaticky vytvorí, ak ešte neexistujú. Po vytvorení štatistiky ich môže optimalizovať dotaz pri odhadovaní nákladov plánu spúšťacieho dotazu. Okrem toho, ak nástroj dotazov určí, že existujúca štatistika relevantná pre dotaz už presne neodráža údaje, táto štatistika sa automaticky obnoví. Keďže tieto automatické operácie sa vykonávajú synchrónne, môžete očakávať, že trvanie dotazu zahrnie tentoraz, ak ešte neexistujú potrebné štatistiky alebo od posledného obnovenia štatistiky nastali významné zmeny údajov.

Overenie automatických štatistík v čase dotazu

Existujú rôzne prípady, v ktorých môžete očakávať určitý typ automatických štatistík. Najbežnejšie sú štatistiky založené na histograme, ktoré požaduje optimalizátor dotazov pre stĺpce uvedené v stĺpcoch, na ktoré sa odkazuje v zoskupení BYs, JOIN, klauzuly DISTINCT, filtre (klauzuly WHERE) a ORDER BYs. Ak napríklad chcete zobraziť automatické vytvorenie týchto štatistík, dotaz spustí vytvorenie, ak štatistika COLUMN_NAME ešte neexistuje. Napríklad:

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

V tomto prípade by ste mali očakávať, že sa vytvorili štatistiky COLUMN_NAME . Ak by stĺpec bol tiež varchar column, zobrazili by sa tiež štatistiky priemernej dĺžky stĺpca. Ak chcete overiť, či sa automaticky vytvorili štatistiky, môžete spustiť nasledujúci dotaz:

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;

V tomto dotaze sa vyhľadajú iba štatistiky založené na stĺpcoch. Ak chcete zobraziť všetky štatistiky, ktoré existujú pre túto tabuľku, odstráňte kódy JOIN na sys.stats_columns a sys.columns.

Teraz môžete nájsť statistics_name automaticky vygenerované štatistiky histogramu (malo by to byť niečo ako _WA_Sys_00000007_3B75D760) a spustiť nasledujúci T-SQL:

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

Napríklad:

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

Hodnota Updated v množine výsledkov databázy DBCC SHOW_STATISTICS by mala byť dátum (v UTC) podobný dátumu, ako keď ste spustili pôvodný dotaz GROUP BY.

Tieto automaticky generované štatistiky potom môže nástroj dotazov v následných dotazoch využiť na zlepšenie nákladov a efektivity vykonávania plánu. Ak v tabuľke dôjde k dostatočným zmenám, nástroj dotazov obnoví tieto štatistiky aj s cieľom zlepšiť optimalizáciu dotazu. Rovnaké cvičenie z predchádzajúcej ukážky je možné použiť po výraznej zmene tabuľky. V službe Fabric používa nástroj dotazov SQL na obnovenie štatistiky rovnakú rekompilaciu prahovú hodnotu ako SQL Server 2016 (13,x).

Typy automaticky generovaných štatistík

V službe Microsoft Fabric existuje niekoľko typov štatistík, ktoré nástroj automaticky vygeneruje na zlepšenie plánov dotazov. V súčasnosti sa nachádzajú v sys.stats , aj keď nie všetky sú užitočné:

  • Štatistiky histogramu
    • Vytvorenie stĺpca, ktorý si vyžaduje štatistiku histogramu v čase dotazu
    • Tieto objekty obsahujú histogram a informácie o hustote týkajúce sa distribúcie konkrétneho stĺpca. Podobne ako pri štatistikách automaticky vytvorených v čase dotazu vo vyhradených bazénoch Azure Synapse Analytics.
    • Názov začína na _WA_Sys_.
    • Obsah je možné zobraziť pomocou SHOW_STATISTICS DBCC
  • Štatistiky priemernej dĺžky stĺpca
    • Vytvorené pre stĺpce znakov premennej (varchar) väčšie ako 100 a vyžadujú priemernú dĺžku stĺpca v čase dotazu.
    • Tieto objekty obsahujú hodnotu predstavujúcu priemernú veľkosť riadka stĺpca varchar v čase vytvorenia štatistiky.
    • Názov začína na ACE-AverageColumnLength_.
    • Obsah nemôže zobraziť a používateľ ho nedokáže použiť.
  • Štatistika kardinality založenej na tabuľke
    • Vytvorené v tabuľke, ktorá vyžaduje odhad kardinality v čase dotazu.
    • Tieto objekty obsahujú odhad počtu riadkov tabuľky.
    • Pomenované ACE-Cardinality.
    • Obsah nemôže zobraziť a používateľ ho nedokáže použiť.

Obmedzenia

  • Manuálne a upravené štatistiky histogramu s jedným stĺpcom je možné vytvoriť a upraviť.
  • Vytvorenie štatistiky viacerých stĺpcov nie je podporované.
  • Iné štatistické objekty sa môžu zobraziť v sys.stats, okrem manuálne vytvorených štatistík a automaticky vytvorených štatistík. Tieto objekty sa nepoužívajú na optimalizáciu dotazov.