Statistika

Platí pro:✅ Koncový bod SQL analytics a Datový 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í zvážit všechny možné plány 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 s nejmenším odhadovaným objemem práce. Statistiky jsou objekty, které obsahují relevantní informace o vašich datech, aby optimalizátor dotazů mohl tyto náklady odhadnout.

Jak použí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í statistiky pro všechny tabulky

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

  • Pokud vytváříte statistiky ručně, zvažte zaměření se na sloupce, které se ve vaší úloze dotazů často používají (konkrétně v GROUP BY, ORDER BYs, ve filtrech a v JOINech).
  • 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řte statistiku v tabulce dbo.DimCustomer na základě všech řádků ve sloupci CustomerKey:

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

Chcete-li ručně aktualizovat objekt statistiky DimCustomer_CustomerKey_FullScan, například po velké aktualizaci dat:

UPDATE STATISTICS dbo.DimCustomer (DimCustomer_CustomerKey_FullScan) WITH FULLSCAN;  

Zobrazit informace o objektu statistik:

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

Chcete-li zobrazit pouze informace o histogramu objektu statistiky:

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

Chcete-li objekt statistik DimCustomer_CustomerKey_FullScan ručně odstranit:

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 při dotazu

Pokaždé, když vydáte dotaz a optimalizátor dotazů vyžaduje statistiky pro zkoumání plánu, Microsoft Fabric tyto statistiky automaticky vytvoří, pokud ještě neexistují. Po vytvoření statistik je může optimalizátor dotazů využít při odhadu nákladů na plán spouštěcího dotazu. Kromě toho, pokud dotazovací stroj zjistí, že existují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 zahrnovat tento čas v případě, že potřebné statistiky ještě neexistují nebo od poslední aktualizace statistik došlo k významným změnám dat.

Ověřte automatické statistiky v querytime

Existují různé případy, kdy můžete očekávat nějaký druh automatických statistik. Nejběžnější jsou statistiky založené na histogramu, které jsou požadovány optimalizátorem dotazů pro sloupce použité v klauzulích GROUP BY, JOIN, DISTINCT, filtrech (klauzulích WHERE) a ORDER BY. Pokud například chcete zobrazit automatické vytváření těchto statistik, dotaz vyvolá jejich vytvoření, pokud statistiky pro 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 statistiky pro COLUMN_NAME již byly vytvořeny. Pokud byl sloupec také typu varchar, zobrazily by se také vytvořené statistiky průměrné délky sloupce. 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 
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;

Teď můžete najít statistics_name automaticky vygenerované statistiky histogramu (mělo by to být něco jako _WA_Sys_00000007_3B75D760) a 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ů příkazu DBCC SHOW_STATISTICS by měla být datem (v UTC), podobně jako při spuštění původního dotazu GROUP BY.

Tyto automaticky generované statistiky pak může dotazovací modul využít v následných dotazech ke zlepšení odhadu nákladů plánu a efektivity 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. Ve Fabric 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é jsou automaticky generovány za účelem vylepšení plánů dotazů. V současné době je lze nalézt v sys.stats, ačkoli ne všechny jsou použitelné:

  • Statistika histogramu
    • Vytvořeno pro každý sloupec vyžadující statistiky histogramu při 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ě kompilace dotazu ve vyhrazených fondech SQL Azure Synapse Analytics.
    • Název začíná znakem _WA_Sys_.
    • Obsah lze zobrazit pomocí DBCC SHOW_STATISTICS
  • Průměrné statistiky délky sloupců
    • Vytvořeno pro sloupce s proměnnou délkou znaků (varchar) delší než 100 znaků, které při době dotazu potřebují průměrnou délku sloupce.
    • Tyto objekty obsahují hodnotu představující průměrnou velikost řádku pro sloupec varchar v době vytvoření statistiky.
    • Název začíná znakem ACE-AverageColumnLength_.
    • Obsah nelze zobrazit a uživatel s ním nemůže pracovat.
  • Statistiky kardinality podle tabulky
    • Vytváří se pro tabulku vyžadující odhad kardinálity v době spuštění dotazu, pouze pokud nejsou k dispozici jiná metadata počtu řádků.
      • Tyto objekty obsahují odhad počtu řádků tabulky.
      • Pojmenováno ACE-Cardinality.
      • Obsah nelze zobrazit a uživatel s ním nemůže provádět žádné akce.

Integrované optimalizace ve statistikách Fabricu

Přírůstková aktualizace statistik

Přírůstková aktualizace statistik je vylepšení výkonu pro automatické aktualizace statistik sloupců.

Obvykle platí, že když se statistika sloupce automaticky aktualizuje, musí se zkontrolovat vzorek celého sloupce, aby se statistika aktualizovala. Tato funkce tyto operace zrychluje, pokud je to možné, pouze vzorkováním řádků, které byly přidány od poslední aktualizace, a sloučením těchto dat s existujícími histogramy.

Když modul požádá o aktualizaci statistiky sloupců, automaticky určí, jestli se tato rychlejší metoda aktualizace dá použít. Přírůstkové aktualizace statistik jsou obvykle přínosné pro větší tabulky, které byly většinou aktualizovány pomocí příkazů INSERT od poslední aktualizace statistik.

Proaktivní aktualizace statistik

Proaktivní aktualizace statistik je plně spravovaný proces, který se po změně dat pokouší předem provést aktualizaci statistik.

Cílem této optimalizace je snížit pravděpodobnost SELECT zpoždění dotazu způsobeného aktualizacemi statistik během generování plánu dotazů.

Proaktivní aktualizace statistik ovlivňují pouze automaticky generované statistiky histogramu, které mají systémově generovaný konvenční způsob pojmenování_WA_Sys_.

Funkce proaktivní aktualizace statistik je ve výchozím nastavení povolená, ale dá se nakonfigurovat pomocí příkazu ALTER DATABASE T-SQL.

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 vedle ručně vytvořené statistiky a automaticky vytvořené statistiky. Tyto objekty se nepoužívají k optimalizaci dotazů.