Sdílet prostřednictvím


SHOW_STATISTICS DBCC (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsPlatform Platform System (PDW)koncový bod SQL Analytics ve službě Microsoft FabricWarehouse v Microsoft Fabric

Zobrazí aktuální statistiku optimalizace dotazů pro tabulku nebo indexované zobrazení. Optimalizátor dotazů používá statistiky k odhadu kardinality nebo počtu řádků ve výsledku dotazu, což umožňuje optimalizátoru dotazů vytvořit plán dotazů s vysokou kvalitou. Optimalizátor dotazů může například použít odhady kardinality k výběru operátoru hledání indexu místo operátoru prohledávání indexu v plánu dotazu, což zlepšuje výkon dotazů tím, že se vyhne kontrole indexu náročného na prostředky.

Optimalizátor dotazů ukládá statistiky pro tabulku nebo indexované zobrazení v objektu statistiky. Pro tabulku se objekt statistiky vytvoří buď v indexu, nebo v seznamu sloupců tabulky. Objekt statistiky obsahuje záhlaví s metadaty o statistikách, histogram s rozdělením hodnot v prvním klíčovém sloupci objektu statistiky a vektor hustoty pro měření korelace mezi sloupci. Databázový stroj dokáže vypočítat odhady kardinality s libovolnými daty v objektu statistiky. Další informace naleznete v tématu statistiky a odhad kardinality (SQL Server).

DBCC SHOW_STATISTICS zobrazí záhlaví, histogram a vektor hustoty na základě dat uložených v objektu statistiky. Syntaxe umožňuje zadat tabulku nebo indexované zobrazení spolu s názvem cílového indexu, názvem statistiky nebo názvem sloupce.

Důležité aktualizace v předchozích verzích SQL Serveru:

  • Od verze SQL Server 2012 (11.x) Service Pack 1 je k dispozici zobrazení dynamické správy sys.dm_db_stats_properties pro programové načtení informací hlaviček obsažených v objektu statistiky pro nekrementální statistiky.

  • Počínaje aktualizací SQL Server 2014 (12.x) Service Pack 2 a SQL Server 2012 (11.x) Service Pack 1 je k dispozici sys.dm_db_incremental_stats_properties dynamické zobrazení správy pro programové načtení informací hlaviček obsažených v objektu statistiky pro přírůstkové statistiky.

  • Od verze SQL Server 2016 (13.x) Service Pack 1 CU 2 je k dispozici zobrazení dynamické správy sys.dm_db_stats_histogram pro programové načtení informací histogramu obsažených v objektu statistiky.

  • Tato syntaxe není podporována bezserverovým fondem SQL ve službě Azure Synapse Analytics.

  • Další informace o statistikách v Microsoft Fabric naleznete v tématu Statistika.

Transact-SQL konvence syntaxe

Syntax

Syntaxe pro SQL Server a Azure SQL Database:

DBCC SHOW_STATISTICS ( table_or_indexed_view_name , target )
[ WITH [ NO_INFOMSGS ] < option > [ , ...n ] ]
< option > ::=
    STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM
[ ; ]

Syntaxe pro Azure Synapse Analytics, systém PDW (Analytics Platform System) a Microsoft Fabric:

DBCC SHOW_STATISTICS ( table_name , target )
    [ WITH { STAT_HEADER | DENSITY_VECTOR | HISTOGRAM } [ , ...n ] ]
[ ; ]

Argumenty

table_or_indexed_view_name

Název tabulky nebo indexovaného zobrazení, pro které se mají zobrazit informace o statistikách.

table_name

Název tabulky, která obsahuje statistiku, která se má zobrazit. Tabulka nemůže být externí tabulkou.

cílové

Název indexu, statistiky nebo sloupce, pro který se mají zobrazit informace o statistikách. cílové jsou uzavřeny do závorek, jednoduchých uvozovek, dvojitých uvozovek nebo žádných uvozovek.

  • Pokud cílový je název existujícího indexu nebo statistiky v tabulce nebo indexované zobrazení, vrátí se informace o statistikách o tomto cíli.
  • Pokud cílový je název existujícího sloupce a automaticky vytvořený objekt statistiky pro tento sloupec existuje, vrátí se informace o této automaticky vytvořené statistice.

Pokud pro cíl sloupce neexistuje automaticky vytvořená statistika, vrátí se chybová zpráva 2767.

V systému Azure Synapse Analytics a Platform Platform System (PDW) cíl nemůže být název sloupce.

Ve službě Warehouse v Microsoft Fabric cílit může být název statistiky histogramu s jedním sloupcem nebo sloupce. Pokud se pro cílovýpoužívá název sloupce, vrátí tento příkaz informace o distribuci pouze o automaticky generované statistikě histogramu. Pokud chcete zobrazit informace o ručně vytvořené statistikě histogramu, zadejte název statistiky jako cílový.

NO_INFOMSGS

Potlačí všechny informační zprávy, které mají úrovně závažnosti od 0 do 10.

STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM [ , n ]

Zadání jedné nebo více těchto možností omezuje sady výsledků vrácené příkazem na zadanou možnost nebo možnosti. Pokud nejsou zadány žádné možnosti, vrátí se všechny informace o statistikách.

STATS_STREAM je určen pouze pro informační účely. Nepodporuje se. Budoucí kompatibilita není zaručena.

Sada výsledků

Následující tabulka popisuje sloupce vrácené v sadě výsledků při zadání STAT_HEADER.

Název sloupce Popis
Jméno Název objektu statistiky.
Aktualizovaný Datum a čas poslední aktualizace statistiky Funkce STATS_DATE představuje alternativní způsob načtení těchto informací. Další informace najdete v části Poznámky na této stránce.
Řádky Celkový počet řádků v tabulce nebo indexované zobrazení při poslední aktualizaci statistiky Pokud jsou statistiky filtrované nebo odpovídají filtrovanému indexu, může být počet řádků menší než počet řádků v tabulce. Další informace naleznete v tématu Statistika.
Vzorkované řádky Celkový počet řádků vzorkovaných pro výpočty statistik. Pokud řádky vzorkované < řádky, zobrazí se histogram a výsledky hustoty odhady na základě vzorkovaných řádků.
Schody Počet kroků v histogramu Každý krok zahrnuje oblast hodnot sloupců následovanou hodnotou horního vázaného sloupce. Kroky histogramu jsou definovány v prvním klíčovém sloupci statistiky. Maximální počet kroků je 200.
Hustota Vypočítáno jako 1 / jedinečné hodnoty pro všechny hodnoty v prvním klíčovém sloupci objektu statistiky s výjimkou hodnot hranic histogramu. Tato hodnota hustoty není používána optimalizátorem dotazů a zobrazuje se kvůli zpětné kompatibilitě s verzemi před SQL Serverem 2008 (10.0.x).
Průměrná délka klíče Průměrný počet bajtů na hodnotu pro všechny klíčové sloupce v objektu statistiky.
Index řetězců Ano označuje, že objekt statistiky obsahuje souhrnné statistiky řetězců ke zlepšení odhadů kardinality pro predikáty dotazu, které používají operátor LIKE; například WHERE ProductName LIKE '%Bike'. Souhrnné statistiky řetězců se ukládají odděleně od histogramu a jsou vytvořeny v prvním klíčovém sloupci objektu statistiky, pokud je typ znak, varchar, nchar, nvarchar, varchar(max), nvarchar(max), textnebo ntext..
Výraz filtru Predikát pro podmnožinu řádků tabulky zahrnutých v objektu statistiky. NULL = nefiltrované statistiky. Další informace o filtrovaných predikátech najdete v tématu Vytvoření filtrovaných indexů. Další informace o filtrovaných statistikách naleznete v tématu Statistika.
Nefiltrované řádky Celkový počet řádků v tabulce před použitím výrazu filtru Pokud je výraz filtru NULL, Unfiltered Rows se rovná Rows.
Trvalé procento vzorku Trvalé procento vzorku použité pro aktualizace statistiky, které explicitně nezadávají procento vzorkování. Pokud je hodnota nula, není pro tuto statistiku nastaveno žádné trvalé procento vzorku.

platí pro: SQL Server 2016 (13.x) Service Pack 1 CU 4

Následující tabulka popisuje sloupce vrácené v sadě výsledků při zadání DENSITY_VECTOR.

Název sloupce Popis
Veškerá hustota Hustota je 1 / jedinečných hodnot. Výsledky zobrazují hustotu pro každou předponu sloupců v objektu statistiky, jeden řádek na hustotu. Jedinečná hodnota je jedinečný seznam hodnot sloupců na řádek a předponu sloupců. Pokud například objekt statistiky obsahuje klíčové sloupce (A, B, C), výsledky hlásí hustotu jedinečných seznamů hodnot v každé z těchto předpon sloupců: (A), (A,B) a (A, B, C). Pomocí předpony (A, B, C) je každý z těchto seznamů jedinečný seznam hodnot: (3, 5, 6), (4, 4, 6), (4, 5, 6), (4, 5, 7). Při použití předpony (A, B) mají stejné hodnoty sloupců tyto seznamy jedinečných hodnot: (3, 5), (4, 4) a (4, 5)
Průměrná délka Průměrná délka v bajtech pro uložení seznamu hodnot sloupců pro předponu sloupce. Pokud například hodnoty v seznamu (3, 5, 6) vyžadují 4 bajty, je délka 12 bajtů.
Sloupce Názvy sloupců v předponě, pro které se zobrazí Všechna hustota a Průměrná délka.

Následující tabulka popisuje sloupce vrácené v sadě výsledků při zadání možnosti HISTOGRAM.

Název sloupce Popis
RANGE_HI_KEY Hodnota horního vázaného sloupce pro krok histogramu Hodnota sloupce se také nazývá hodnota klíče.
RANGE_ROWS Odhadovaný počet řádků, jejichž hodnota sloupce spadá do kroku histogramu s výjimkou horní hranice
EQ_ROWS Odhadovaný počet řádků, jejichž hodnota sloupce se rovná horní hranici kroku histogramu.
DISTINCT_RANGE_ROWS Odhadovaný počet řádků s jedinečnou hodnotou sloupce v kroku histogramu s výjimkou horní hranice
AVG_RANGE_ROWS Průměrný početřádkůch Pokud je DISTINCT_RANGE_ROWS větší než 0, AVG_RANGE_ROWS se vypočítá vydělením RANGE_ROWS DISTINCT_RANGE_ROWS. Pokud je DISTINCT_RANGE_ROWS 0, AVG_RANGE_ROWS vrátí hodnotu 1 pro krok histogramu.

Poznámky

Datum aktualizace statistiky je uloženo v objektu blob statistiky statistiky společně s histogramem a vektor hustoty, ne v metadatech. Pokud nejsou načtena žádná data ke generování statistik, objekt blob statistiky se nevytvořil, datum není k dispozici a aktualizovaný sloupec je NULL. Toto je případ filtrovaných statistik, pro které predikát nevrací žádné řádky ani pro nové prázdné tabulky.

Histogram

Histogram měří četnost výskytů pro každou jedinečnou hodnotu v sadě dat. Optimalizátor dotazů vypočítá histogram hodnot sloupců v prvním klíčovém sloupci objektu statistiky a vybere hodnoty sloupců statisticky vzorkováním řádků nebo provedením úplné kontroly všech řádků v tabulce nebo zobrazení. Pokud se histogram vytvoří ze vzorek sady řádků, uložené součty pro počet řádků a počet jedinečných hodnot jsou odhady a nemusí být celá celá čísla.

Pokud chcete vytvořit histogram, optimalizátor dotazu seřadí hodnoty sloupců, vypočítá počet hodnot, které odpovídají každé jedinečné hodnotě sloupce, a potom agreguje hodnoty sloupců do maximálně 200 souvislých kroků histogramu. Každý krok obsahuje rozsah hodnot sloupců následovaných hodnotou horního vázaného sloupce. Oblast zahrnuje všechny možné hodnoty sloupců mezi hodnotami hranic, s výjimkou samotných hodnot hranic. Nejnižší z hodnot seřazených sloupců je horní hraniční hodnota prvního kroku histogramu.

Následující diagram znázorňuje histogram se šesti kroky. Oblast vlevo od první hodnoty horní hranice je prvním krokem.

diagramu výpočtu histogramu z hodnot vzorek sloupce

Pro každý krok histogramu:

  • Tučná čára představuje hodnotu horní hranice (RANGE_HI_KEY) a počet výskytů (EQ_ROWS)
  • Plná oblast vlevo od RANGE_HI_KEY představuje rozsah hodnot sloupců a průměrný počet výskytů každé hodnoty sloupce (AVG_RANGE_ROWS). AVG_RANGE_ROWS prvního kroku histogramu je vždy 0.
  • Tečkované čáry představují vzorek hodnot použitých k odhadu celkového počtu jedinečných hodnot v oblasti (DISTINCT_RANGE_ROWS) a celkového počtu hodnot v oblasti (RANGE_ROWS). Optimalizátor dotazů používá RANGE_ROWS a DISTINCT_RANGE_ROWS k výpočtu AVG_RANGE_ROWS a neukládá vzorkované hodnoty.

Optimalizátor dotazů definuje kroky histogramu podle jejich statistického významu. Používá algoritmus maximálního rozdílu k minimalizaci počtu kroků v histogramu při maximalizaci rozdílu mezi hodnotami hranic. Maximální počet kroků je 200. Počet kroků histogramu může být menší než počet jedinečných hodnot, a to i u sloupců s méně než 200 hraničními body. Například sloupec s 100 jedinečnými hodnotami může mít histogram s méně než 100 hraničními body.

Vektor hustoty

Optimalizátor dotazů používá hustoty k vylepšení odhadů kardinality pro dotazy, které vracejí více sloupců ze stejné tabulky nebo indexovaného zobrazení. Vektor hustoty obsahuje jednu hustotu pro každou předponu sloupců v objektu statistiky. Pokud má například objekt statistiky klíčové sloupce CustomerId, ItemId a Price, hustota se vypočítá na každé z následujících předpon sloupců.

Předpona sloupce Hustota vypočítaná na
(CustomerId) Řádky s odpovídajícími hodnotami pro CustomerId
(CustomerId, ItemId) Řádky s odpovídajícími hodnotami pro CustomerId a ItemId
(CustomerId, ItemId, Price) Řádky s odpovídajícími hodnotami pro CustomerId, ItemIda Price

Omezení

DBCC SHOW_STATISTICS neposkytuje statistiky pro prostorové indexy ani indexy columnstore optimalizované pro paměť.

Oprávnění pro SQL Server a SLUŽBU SQL Database

Aby uživatel mohl zobrazit objekt statistiky, musí mít k tabulce oprávnění SELECT.

Existují následující požadavky pro oprávnění SELECT, aby byla dostatečná ke spuštění příkazu:

  • Uživatelé musí mít oprávnění ke všem sloupcům v objektu statistiky.
  • Uživatelé musí mít oprávnění ke všem sloupcům v podmínce filtru (pokud existuje).
  • Tabulka nemůže mít zásady zabezpečení na úrovni řádků.
  • Pokud je některý ze sloupců v objektu statistiky maskován pravidly dynamického maskování dat, kromě oprávnění SELECT musí mít uživatel oprávnění UNMASK nebo být členem db_ddladmin role.

Ve verzích starších než SQL Server 2012 (11.x) Service Pack 1 musí uživatel vlastnit tabulku nebo uživatel musí být členem správce systému pevné role serveru, db_owner pevné databázové role nebo db_ddladmin pevné databázové role.

Poznámka

Chcete-li změnit chování zpět na chování před SQL Serverem 2012 (11.x) Service Pack 1, použijte příznak trasování 9485.

Oprávnění pro Azure Synapse Analytics a systém platformy Analytics (PDW)

DBCC SHOW_STATISTICS vyžaduje SELECT oprávnění k tabulce nebo členství v pevné roli serveru správce systému, db_owner pevné databázové roli nebo db_ddladmin pevné databázové roli.

Omezení a omezení pro Azure Synapse Analytics a Platform Platform System (PDW)

DBCC SHOW_STATISTICS zobrazuje statistiky uložené v databázi Shell na úrovni řídicího uzlu. Nezobrazuje statistiky, které SQL Server automaticky vytváří na výpočetních uzlech.

DBCC SHOW_STATISTICS se u externích tabulek nepodporuje.

V Microsoft Fabric DBCC SHOW_STATISTICS zobrazuje výsledky pouze pro statistiky histogramu, nikoli statistiky ACE-*.

Příklady: SQL Server a Azure SQL Database

A. Vrácení všech informací o statistikách

Následující příklad zobrazí všechny informace o statistikách pro AK_Address_rowguid index tabulky Person.Address v databázi AdventureWorks2022.

DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid);
GO

B. Určení možnosti HISTOGRAM

Tím se omezí informace o statistikách zobrazované pro Customer_LastName na data HISTOGRAMu.

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

Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)

C. Zobrazení obsahu jednoho objektu statistiky

Následující příklad vytvoří objekt statistiky a pak zobrazí obsah Customer_LastName statistiky DimCustomer tabulky v AdventureWorksPDW2022 ukázkové databázi.

-- Uses AdventureWorksPDW
--First, create a statistics object
CREATE STATISTICS Customer_LastName
ON AdventureWorksPDW2012.dbo.DimCustomer (LastName);
GO
DBCC SHOW_STATISTICS ("dbo.DimCustomer", Customer_LastName);
GO

Výsledky zobrazují záhlaví, vektor hustoty a část histogramu.

snímek obrazovky zobrazující výsledky SHOW_STATISTICS DBCC

Viz také

Další kroky

  • CREATE INDEX (Transact-SQL)
  • CREATE STATISTICS (Transact-SQL)
  • DROP STATISTICS (Transact-SQL)
  • sp_autostats (Transact-SQL)
  • sp_createstats (Transact-SQL)
  • STATS_DATE (Transact-SQL)
  • UPDATE STATISTICS (Transact-SQL)