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 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:
- Uživatelsky definované statistiky
- Uživatel ručně používá syntaxi jazyka DDL (Data Definition Language) k vytváření, aktualizaci a odstraňování statistik podle potřeby.
- Automatické statistiky
- Modul automaticky vytváří a udržuje statistiky v době dotazu.
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í se na sloupce, které se ve vaší úloze dotazů často používají (konkrétně ve skupině BY, ORDER BYs, filtry 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_FullScan
statistiky , 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_FullScan
statistiky:
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:
- Zobrazení katalogu sys.stats
- zobrazení katalogu sys.stats_columns
- systémová funkce STATS_DATE
Automatické statistiky v 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í 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í 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 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
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 vygenerovanou statistiku histogramu (mělo by to vypadat přibližně) _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ů 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ů.