Statistiky v datových skladech v prostředcích infrastruktury

Platí pro: Koncový bod sql Analytics a sklad v Microsoft Fabric

Sklad v Microsoft Fabric používá dotazovací modul k vytvoření plánu provádění pro daný dotaz SQL. Když odešlete dotaz, optimalizátor dotazů se pokusí vytvořit výčet všech možných plánů a zvolit nejúčinnějšího kandidáta. Aby bylo možné určit, který plán by vyžadoval nejmenší režijní náklady (vstupně-výstupní operace, procesor, paměť), musí být modul schopný vyhodnotit množství práce nebo řádků, které by mohly být zpracovány u každého operátoru. Potom na základě nákladů každého plánu zvolí ten, který má nejmenší odhadovanou práci. Statistiky jsou objekty, které obsahují relevantní informace o vašich datech, aby optimalizátor dotazů mohl tyto náklady odhadnout.

Jak využívat statistiky

Pokud chcete dosáhnout optimálního výkonu dotazů, je důležité mít přesné statistiky. Microsoft Fabric v současné době podporuje následující cesty k poskytování relevantních a aktuálních statistik:

Ruční statistika pro všechny tabulky

Tradiční možnost zachování stavu statistik je k dispozici v Microsoft Fabric. Uživatelé mohou vytvářet, aktualizovat a odstraňovat histogramy založené na jednosloupcích pomocí funkce CREATE STATISTICS, UPDATE STATISTICS a DROP STATISTICS. Uživatelé také můžou zobrazit obsah statistiky založené na histogramu s jedním sloupcem pomocí SHOW_STATISTICS DBCC. V současné době se podporuje omezená verze těchto příkazů.

  • Pokud vytváříte statistiky ručně, zvažte zaměření na ty, které se ve vaší úloze dotazů často používají (konkrétně ve skupinách BY, ORDER BYs, filters a JOINs).
  • Zvažte pravidelné aktualizace statistik na úrovni sloupců po změnách dat, které výrazně mění počet řádků nebo distribuci dat.

Příklady ruční údržby statistik

Vytvoření statistiky v dbo.DimCustomer tabulce na základě všech řádků ve sloupci CustomerKey:

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

Ruční aktualizace objektu DimCustomer_CustomerKey_FullScanstatistiky , například po velké aktualizaci dat:

UPDATE STATISTICS dbo.DimCustomer (DimCustomer_CustomerKey_FullScan) WITH FULLSCAN;  

Zobrazení informací o objektu statistiky:

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

Zobrazení pouze informací o histogramu objektu statistiky:

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

Ruční odstranění objektu DimCustomer_CustomerKey_FullScanstatistiky:

DROP STATISTICS dbo.DimCustomer.DimCustomer_CustomerKey_FullScan;

Následující objekty T-SQL lze také použít ke kontrole ručně vytvořených a automaticky vytvořených statistik v Microsoft Fabric:

Automatické statistiky v dotazu

Pokaždé, když vydáte dotaz a optimalizátor dotazů vyžaduje statistiky pro průzkum plánu, Microsoft Fabric tyto statistiky automaticky vytvoří, pokud ještě neexistují. Po vytvoření statistiky je optimalizátor dotazů může využít při odhadu nákladů na plán aktivačního dotazu. Kromě toho, pokud dotazovací modul zjistí, že stávající statistiky relevantní pro dotaz již přesně neodráží data, tyto statistiky se automaticky aktualizují. Vzhledem k tomu, že se tyto automatické operace provádějí synchronně, můžete očekávat, že doba trvání dotazu bude zahrnuta v případě, že potřebné statistiky ještě neexistují nebo došlo k významným změnám dat od poslední aktualizace statistiky.

Ověření automatické statistiky v době dotazu

Existují různé případy, kdy můžete očekávat určitý typ automatické statistiky. Nejběžnější jsou statistiky založené na histogramu, které jsou požadovány optimalizátorem dotazů pro sloupce odkazované v group BYs, JOINs, DISTINCT klauzule, filtry (klauzule WHERE) a ORDER BY. Pokud například chcete zobrazit automatické vytváření těchto statistik, aktivuje se vytvoření dotazu, pokud statistiky COLUMN_NAME ještě neexistují. Příklad:

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

V tomto případě byste měli očekávat, že se vytvořily statistiky COLUMN_NAME . Pokud byl sloupec také varchar, zobrazila by se také vytvořená statistika průměrné délky sloupců. Pokud chcete ověřit, že se statistiky vytvořily automaticky, můžete spustit následující 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;

Tento dotaz hledá pouze statistiky založené na sloupcích. Pokud chcete zobrazit všechny statistiky, které existují pro tuto tabulku, odeberte joins na sys.stats_columns a sys.columns.

Teď můžete najít statistics_name automaticky vygenerovanou statistiku histogramu (mělo by to vypadat přibližně) _WA_Sys_00000007_3B75D760a spustit následující T-SQL:

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

Příklad:

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

Updated Hodnota v sadě výsledků SHOW_STATISTICS DBCC by měla být datum (v UTC), podobně jako při spuštění původního dotazu GROUP BY.

Tyto automaticky generované statistiky pak může využít v následných dotazech dotazovací modul ke zlepšení efektivity plánování nákladů a provádění. Pokud v tabulce dojde k dostatečným změnám, dotazovací modul tyto statistiky aktualizuje, aby se zlepšila optimalizace dotazů. Stejné předchozí ukázkové cvičení se dá použít i po významné změně tabulky. V prostředcích infrastruktury používá dotazovací modul SQL k aktualizaci statistik stejnou mezní hodnotu rekompilace jako SQL Server 2016 (13.x).

Typy automaticky generovaných statistik

V Microsoft Fabric existuje několik typů statistik, které modul automaticky vygeneruje, aby se zlepšily plány dotazů. V současné době lze nalézt v sys.stats ačkoli ne všechny jsou akce:

  • Statistika histogramu
    • Vytvořeno na sloupec vyžadující statistiku histogramu v době dotazu
    • Tyto objekty obsahují histogram a informace o hustotě týkající se rozdělení konkrétního sloupce. Podobá se statistikám automaticky vytvořeným v době dotazu ve vyhrazených fondech Azure Synapse Analytics.
    • Název začíná na _WA_Sys_.
    • Obsah lze zobrazit pomocí SHOW_STATISTICS DBCC
  • Průměrné statistiky délky sloupců
    • Vytvořeno pro sloupce proměnných znaků (varchar) větší než 100 vyžaduje průměrnou délku sloupce v době dotazu.
    • Tyto objekty obsahují hodnotu představující průměrnou velikost řádku sloupce varchar v době vytvoření statistiky.
    • Název začíná na ACE-AverageColumnLength_.
    • Obsah nelze zobrazit a uživatel je neakční.
  • Statistiky kardinality založené na tabulce
    • Vytvořeno pro každou tabulku vyžadující odhad kardinality v době dotazu.
    • Tyto objekty obsahují odhad počtu řádků tabulky.
    • Pojmenovaný ACE-Cardinality.
    • Obsah nelze zobrazit a uživatel je neakční.

Omezení

  • Ručně lze vytvořit a upravit pouze statistiky histogramu s jedním sloupcem.
  • Vytváření statistik s více sloupci není podporováno.
  • Jiné statistické objekty se mohou objevit v sys.stats, kromě ručně vytvořené statistiky a automaticky vytvořené statistiky. Tyto objekty se nepoužívají k optimalizaci dotazů.