Statistika v datových skladech infrastruktury
Platí pro: SQL Endpoint and Warehouse v Microsoft Fabric
Sklad v Microsoft Fabric používá dotazovací stroj 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 vybrat nejúčinnějšího kandidáta. Aby bylo možné určit, který plán by vyžadoval nejmenší režii (vstupně-výstupní operace a paměť), musí být modul schopen vyhodnotit množství práce nebo řádků, které by mohly být zpracovány v jednotlivých operátorech. Na základě nákladů na každý plán pak zvolí plán s nejmenším množstvím odhadované práce. Statistika jsou objekty, které obsahují relevantní informace o vašich datech, aby optimalizátor dotazů mohl tyto náklady odhadnout.
Důležité
Microsoft Fabric je v současné době ve verzi PREVIEW. Tyto informace se týkají předběžného vydání produktu, který může být před vydáním podstatně změněn. Společnost Microsoft neposkytuje na zde uvedené informace žádné záruky, ať už vyjádřené nebo předpokládané.
Jak využívat statistiky
K dosažení 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
- Problémy uživatelů s DDL při vytváření, aktualizaci a odstraňování statistik podle potřeby
- Automatická statistika
- Modul automaticky vytváří statistiky v době dotazu
Ruční statistika pro všechny tabulky
Tradiční možnost udržování stavu statistiky je k dispozici v Microsoft Fabric. Uživatelé můžou vytvářet, aktualizovat a odstraňovat jednosloupčí statistiky založené na histogramu pomocí příkazu CREATE STATISTICS (VYTVOŘIT STATISTIKU), UPDATE STATISTICS (AKTUALIZOVAT STATISTIKU) a DROP STATISTICS (DROP STATISTICS). Uživatelé také můžou zobrazit obsah jednosloupeční statistiky založené na histogramu pomocí SHOW_STATISTICS DBCC. V současné době se podporuje omezená verze těchto příkazů.
- Pokud vytváříte statistiky ručně, zvažte možnost zaměřit se na ty, které jsou v úlohách dotazů hodně využívané (konkrétně ve skupinách BY, ORDER BY, filtrech a sítích JOI).
- Zvažte pravidelnou aktualizaci statistik na úrovni sloupců po změnách dat, které výrazně změní počet řádků nebo distribuci dat.
Příklady údržby ruční statistiky
Vytvoření statistiky v dbo.DimCustomer
tabulce založené na všech řádcích 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 aktualizaci velkých dat:
UPDATE STATISTICS DimCustomer_CustomerKey_FullScan (CustomerKey) 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 i automaticky vytvořených statistik v Microsoft Fabric:
- Zobrazení katalogu sys.stats
- sys.stats_columns zobrazení katalogu
- STATS_DATE systémová funkce
Automatické statistiky při dotazu
Kdykoli vydáte optimalizátor dotazů a vyžaduje statistiku 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 aktivačního dotazu. Vzhledem k tomu, že se toto vytváření provádí synchronně, můžete očekávat, že první spuštění dotazu zahrne tento čas vytvoření statistiky.
Ověření automatického vytváření statistik v době dotazu
Existují různé případy, kdy můžete očekávat automatické vytvoření určitého typu statistiky. Nejběžnější jsou systémové statistiky založené na histogramech, které se často vytvářejí pro sloupce odkazované v argumentech GROUP BY, JOINs, klauzulích DISTINCT, filtrech (klauzulích WHERE) a ORDER BY. Pokud například chcete zobrazit automatické vytváření těchto statistik, dotaz aktivuje vytvoření, pokud statistika pro COLUMN_NAME
ještě neexistuje. Příklad:
SELECT <COLUMN_NAME>
FROM <YOUR_TABLE_NAME>
GROUP BY <COLUMN_NAME>;
V takovém případě byste měli očekávat, že se vytvoří statistika pro COLUMN_NAME
. Pokud byl sloupec také sloupcem varchar, uvidíte také vytvořenou statistiku 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
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 joíny na sys.stats_columns
a sys.columns
.
Teď můžete najít statistics_name
automaticky vygenerovanou statistiku 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');
Hodnota Updated
v sadě výsledků SHOW_STATISTICS DBCC by měla být datum (ve standardu UTC) podobné tomu, kdy jste spustili původní dotaz GROUP BY.
Poznámka
Microsoft Fabric v současné době nepodporuje automatickou aktualizaci statistik v době dotazu.
Typy automaticky generovaných statistik
V Microsoft Fabric existuje několik typů statistik, které modul automaticky generuje za účelem vylepšení plánů dotazů. V současné době je možné je najít v sys.stats , i když ne všechny jsou použitelné:
- Statistika histogramu
- Vytvoření podle sloupce vyžadujícího statistiku histogramu v době dotazu
- Tyto objekty obsahují histogram a informace o hustotě týkající se rozdělení konkrétního sloupce. Podobně jako statistiky automaticky vytvořené v době dotazu ve vyhrazených fondech Azure Synapse Analytics.
- Název začíná na
_WA_Sys_
. - Obsah je možné zobrazit pomocí SHOW_STATISTICS DBCC.
- Statistika průměrné délky sloupce
- Vytvořeno pro sloupce znaků (znak a varchar) vyžadující průměrnou délku sloupců 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 nečinný.
- 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 nečinný.
Omezení
- Ručně lze vytvářet a upravovat pouze statistiky histogramu s jedním sloupcem.
- Vytváření statistik s více sloupci není podporováno.
- Pod sys.stats mohou být zobrazeny další objekty statistiky kromě ručně vytvořené statistiky a automaticky vytvořené statistiky. Tyto objekty se nepoužívají k optimalizaci dotazů.