DBCC SHOW_STATISTICS (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsSQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

A DBCC SHOW_STATISTICS parancs megjeleníti a jelenlegi lekérdezésoptimalizálási statisztikákat egy táblázat vagy indexelt nézet számára. A lekérdezésoptimalizáló statisztikák használatával becsüli meg a lekérdezés eredményének számosságát vagy sorainak számát, ami lehetővé teszi, hogy a Lekérdezésoptimalizáló kiváló minőségű lekérdezéstervet hozzon létre. A Lekérdezésoptimalizáló például számosságbecslésekkel választhatja ki az indexkeresési operátort a lekérdezési terv indexkeresési operátora helyett, így elkerülve az erőforrás-igényes indexvizsgálatot, javítva a lekérdezés teljesítményét.

A Lekérdezésoptimalizáló egy tábla vagy indexelt nézet statisztikáit egy statisztikai objektumban tárolja. Egy tábla esetében a statisztikai objektum egy indexen vagy egy táblaoszloplistán jön létre. A statisztikai objektum tartalmaz egy fejlécet a statisztikák metaadataival, egy hisztogramot a statisztikai objektum első kulcsoszlopában lévő értékek eloszlásával, valamint egy sűrűségvektort az oszlopközi korreláció méréséhez. Az adatbázismotor számosságbecsléseket képes kiszámítani a statisztikai objektum bármely adatával. További információ: Statistics és Cardinality Estimation (SQL Server).

DBCC SHOW_STATISTICS megjeleníti a fejlécet, a hisztogramot és a sűrűségvektort a statisztikai objektumban tárolt adatok alapján. A szintaxis lehetővé teszi táblázat vagy indexelt nézet megadását a célindex nevével, statisztikájával vagy oszlopnevével együtt.

Fontos frissítések az SQL Server korábbi verzióiban:

  • Az SQL Server 2012 (11.x) Service Pack 1 csomagtól kezdve a sys.dm_db_stats_properties dinamikus felügyeleti nézet programozott módon lekérheti a nem növekményes statisztikák statisztikai objektumában található fejlécadatokat.

  • Az SQL Server 2014 (12.x) Service Pack 2 és az SQL Server 2012 (11.x) Service Pack 1 csomagtól kezdve a sys.dm_db_incremental_stats_properties dinamikus felügyeleti nézet programozott módon lekérheti a statisztikai objektum fejlécadatait a növekményes statisztikákhoz.

  • Az SQL Server 2016 (13.x) Service Pack 1 CU 2-től kezdve a sys.dm_db_stats_histogram dinamikus felügyeleti nézet programozott módon lekérheti a statisztikai objektumban található hisztogramadatokat.

  • Ezt a szintaxist az Azure Synapse Analytics kiszolgáló nélküli SQL-készlete nem támogatja.

  • A Microsoft Fabric Data Warehouse statisztikáiról további információt a Statisztika című témakörben talál.

Transact-SQL szintaxis konvenciói

Szintaxis

Szintaxis az SQL Serverhez, az Azure SQL Database-hez és az SQL Database-hez a Fabricben:

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

Syntax for Azure Synapse Analytics, and Warehouse in Microsoft Fabric:

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

Érvek

table_or_indexed_view_name

Annak a táblázatnak vagy indexelt nézetnek a neve, amelyhez statisztikai adatokat szeretne megjeleníteni.

table_name

A megjelenítendő statisztikákat tartalmazó tábla neve. A tábla nem lehet külső tábla.

céladatbázis

Annak az indexnek, statisztikának vagy oszlopnak a neve, amelyhez statisztikai adatokat szeretne megjeleníteni. cél szögletes zárójelek, egyszeri idézőjelek, dupla idézőjelek vagy idézőjelek nélkül vannak megadva.

  • Ha cél egy tábla vagy indexelt nézet meglévő indexének vagy statisztikájának neve, a rendszer visszaadja a célra vonatkozó statisztikai adatokat.
  • Ha a cél egy meglévő oszlop neve, és egy automatikusan létrehozott statisztikai objektum található ezen az oszlopon, a rendszer visszaadja az automatikusan létrehozott statisztikai adatokat.

Ha nem létezik automatikusan létrehozott statisztika egy oszlopcélhoz, a rendszer a 2767-et jelző hibaüzenetet adja vissza.

Az Azure Synapse Analytics-ben a célpont nem lehet oszlop neve.

A Microsoft Fabric Warehouse-ban cél lehet egyoszlopos hisztogram-statisztika vagy oszlop neve. Ha egy oszlopnevet használ cél, ez a parancs csak az automatikusan létrehozott hisztogramstatisztikáról ad vissza terjesztési információkat. A manuálisan létrehozott hisztogram-statisztikák adatainak megtekintéséhez adja meg a statisztikai nevet cél.

NO_INFOMSGS

Letiltja a 0 és 10 közötti súlyossági szintű információs üzeneteket.

STAT_HEADER | DENSITY_VECTOR | HISZTOGRAM | STATS_STREAM [ , n ]

Egy vagy több beállítás megadása korlátozza az utasítás által visszaadott eredményhalmazokat a megadott beállításra vagy beállításokra. Ha nincs megadva beállítás, a rendszer minden statisztikai adatot visszaad.

STATS_STREAM csak tájékoztatási célokra van azonosítva. Nem támogatott. A jövőbeli kompatibilitás nem garantált.

Eredményhalmaz

Az alábbi táblázat a STAT_HEADER megadásakor visszaadott oszlopokat ismerteti.

Oszlop neve Leírás
Name A statisztikai objektum neve.
Updated A statisztikák legutóbbi frissítésének dátuma és időpontja. A STATS_DATE függvény alternatív módon kéri le ezeket az információkat. További információt a lap Megjegyzések szakaszában talál.
Rows A táblázat vagy indexelt nézetben lévő sorok teljes száma a statisztikák legutóbbi frissítésekor. Ha a statisztikák szűrve vannak, vagy egy szűrt indexnek felelnek meg, a sorok száma kisebb lehet, mint a tábla sorainak száma. További információ: Statistics.
Rows Sampled Statisztikai számításokhoz mintavételezett sorok teljes száma. Ha Rows Sampled<Rows, a megjelenített hisztogram és sűrűség eredményei a mintázott sorok alapján készült becslések.
Steps A hisztogram lépéseinek száma. Minden lépés egy oszlopértéktartományra terjed ki, amelyet egy felső kötött oszlopérték követ. A hisztogram lépései a statisztika első kulcsoszlopán vannak definiálva. A lépések maximális száma 200.
Density Számított 1/különböző értékek a statisztikai objektum első kulcsoszlopában lévő összes értékhez, kivéve a hisztogram határértékeit. Ezt Density az értéket a Query Optimizer nem használja, és visszafelé kompatibilitást biztosít az SQL Server 2008 (10.0.x) előtti verziókkal.
Average Key Length Az értékenkénti bájtok átlagos száma a statisztikai objektum összes kulcsoszlopához.
String Index Yes azt jelzi, hogy a statisztikai objektum tartalmaz string összefoglaló statisztikákat a lekérdezési predikátumok kardinalitási becsléseinek javítására, amelyek az LIKE operátort használják; például . WHERE ProductName LIKE '%Bike' A string összefoglaló statisztikák külön tárolódnak a hisztogramtól, és a statisztikai objektum első kulcsoszlopán hozzák létre, ha az a típus: char, varchar, nchar, nvarchar, varchar(max), nvarchar(max),text vagy ntext típusú, és nem használ UTF-8 összeállítást.
Filter Expression A statisztikai objektumban szereplő táblázatsorok részhalmazának predikátuma. NULL = nem szűrt statisztikák. A szűrt predikátumokról további információt a Szűrt indexek létrehozása című témakörben talál. A szűrt statisztikákról további információt a Statisztikacímű témakörben talál.
Unfiltered Rows A szűrőkifejezés alkalmazása előtt a tábla sorainak teljes száma. Ha a szűrőkifejezés NULL, Unfiltered Rows egyenlő Rows.
Persisted Sample Percent A statisztikai frissítésekhez használt, a mintavételezési százalékot nem explicit módon meg nem határozó statisztikai frissítésekhez használt megmaradó minta százalékos aránya. Ha az érték nulla, akkor nincs megőrzött minta százalékos értéke ehhez a statisztikai adathoz.

Érvényes: SQL Server 2016 (13.x) Service Pack 1 CU 4 és újabb verziók.

Az alábbi táblázat a megadott eredményhalmazban DENSITY_VECTOR visszaadott oszlopokat ismerteti.

Oszlop neve Leírás
All Density A sűrűség 1/különböző értékek. Az eredmények sűrűséget jelenítenek meg a statisztikai objektum egyes oszlopelőtagjaihoz, sűrűségenként egy sorhoz. A különálló értékek soronként és oszlopelőtagonként eltérő oszlopértékek. Ha például a statisztikai objektum kulcsoszlopokat (A, B, C) tartalmaz, az eredmények az egyes oszlopelőtagok különböző értéklistáinak sűrűségét jelentik: (A), (A,B) és (A, B, C). Az előtag (A, B, C) használatával mindegyik lista külön értéklista: (3, 5, 6), (4, 4, 6), (4, 5, 6), (4, 5, 7). Az előtag (A, B) használatával ugyanazok az oszlopértékek a következő különböző értéklistákat tartalmaznak: (3, 5), (4, 4) és (4, 5)
Average Length Average length, bájtokban, tárolja az oszlop előtagjának oszlopértékeinek listáját. Ha például a listában szereplő értékek (3, 5, 6) 4 bájtot igényelnek, a hossz 12 bájt.
Columns Az oszlopok nevei az előtagban, amelyekhez All density és Average length jelenik meg.

Az alábbi táblázat az eredményhalmazban a beállítás megadásakor HISTOGRAM visszaadott oszlopokat ismerteti.

Oszlop neve Leírás
RANGE_HI_KEY Hisztogramlépés felső kötött oszlopértéke. Az oszlopértéket kulcsértéknek is nevezik.
RANGE_ROWS Azon sorok becsült száma, amelyek oszlopértéke egy hisztogramlépésen belül esik, a felső korlát kivételével.
EQ_ROWS Azon sorok becsült száma, amelyek oszlopértéke megegyezik a hisztogram lépés felső határával.
DISTINCT_RANGE_ROWS A hisztogramlépésen belül eltérő oszlopértékkel rendelkező sorok becsült száma, a felső kötött kivételével.
AVG_RANGE_ROWS Az ismétlődő oszlopértékekkel rendelkező sorok átlagos száma egy hisztogramlépésen belül, a felső kötött kivételével. Ha DISTINCT_RANGE_ROWS 0-nál nagyobb, AVG_RANGE_ROWS akkor a függvény a osztással RANGE_ROWSDISTINCT_RANGE_ROWSszámítja ki. Ha DISTINCT_RANGE_ROWS 0, AVG_RANGE_ROWS a hisztogram lépéshez 1 értéket ad vissza.

Megjegyzések

A statisztikai frissítés dátuma a statisztikai blobobjektumban a hisztogram és sűrűségvektorvan tárolva, nem a metaadatokban. Ha a rendszer nem olvas be adatokat a statisztikai adatok létrehozásához, a statisztikai blob nem jön létre, a dátum nem érhető el, és az updated oszlop is.NULL Ez a helyzet olyan szűrt statisztikák esetében, amelyeknél a predikátum nem ad vissza sorokat, vagy új üres táblákat.

Annak meghatározására, hogy a lekérdezésoptimalizáló mely statisztikákat tölt be egy adott lekérdezés fordításakor, vizsgálja meg az StatisticsInfo elemet a lekérdezés tényleges végrehajtási tervének XML-jében. Ennek Statistics az elemnek target az attribútuma az érve.DBCC SHOW_STATISTICS További információért lásd: Meghatározzák, mely statisztikákat használt a lekérdezésoptimalizáló.

Hisztogram

A hisztogram az adathalmaz minden egyes különböző értékének előfordulási gyakoriságát méri. A lekérdezésoptimalizáló kiszámítja a statisztikai objektum első kulcsoszlopában lévő oszlopértékek hisztogramját, az oszlopértékeket a sorok statisztikai mintavételezésével vagy a tábla vagy nézet összes sorának teljes vizsgálatával választja ki. Ha a hisztogram egy mintául szolgáló sorkészletből jön létre, a sorok számának és a különböző értékek számának tárolt összegei becslések, és nem kell egész egész számoknak lenniük.

A hisztogram létrehozásához a lekérdezésoptimalizáló rendezi az oszlopértékeket, kiszámítja az egyes oszlopértékeknek megfelelő értékek számát, majd az oszlopértékeket legfeljebb 200 összefüggő hisztogramlépésre összesíti. Minden lépés tartalmaz egy oszlopértéktartományt, majd egy felső kötött oszlopértéket. A tartomány magában foglalja a határértékek közötti összes lehetséges oszlopértéket, kivéve magukat a határértékeket. A rendezett oszlopértékek közül a legalacsonyabb az első hisztogramlépés felső határértéke.

Az alábbi ábrán egy hat lépésből áll a hisztogram. Az első felső határérték bal oldalán található terület az első lépés.

Diagram a hisztogram mintául szolgáló oszlopértékekből való kiszámításának módjáról.

Minden hisztogram lépésnél:

  • A vastag vonal a felső határértéket (RANGE_HI_KEY) és az előforduló hányszor (EQ_ROWS) jelzi
  • A bal RANGE_HI_KEY oldalra lévő szilárd terület az oszlopértékek tartományát és az egyes oszlopértékek átlagosan hányszor fordul elő (AVG_RANGE_ROWS). Az első hisztogram lépés AVG_RANGE_ROWS mindig 0.
  • A szaggatott vonalak a mintavételi értékeket jelentik, amelyeket a különböző értékek teljes számának becslésére használnak a tartományban (DISTINCT_RANGE_ROWS) és az értékek teljes számát a tartományban (RANGE_ROWS). A lekérdezésoptimalizáló a RANGE_ROWS és DISTINCT_RANGE_ROWS függvényt használja a AVG_RANGE_ROWS számításhoz, de nem tárolja a mintavételezett értékeket.

A lekérdezésoptimalizáló a hisztogram lépéseit a statisztikai pontosságuknak megfelelően határozza meg. Maximális különbségi algoritmussal minimalizálja a hisztogram lépéseinek számát, miközben maximalizálja a határértékek közötti különbséget. A lépések maximális száma 200. A hisztogram lépéseinek száma kisebb lehet, mint a különböző értékek száma, még a 200-nál kevesebb határponttal rendelkező oszlopok esetében is. Egy 100 különböző értékkel rendelkező oszlop például 100-nál kevesebb határponttal rendelkező hisztogrammal rendelkezhet.

Sűrűségvektor

A lekérdezésoptimalizáló sűrűségek használatával növeli a számosság becslését azon lekérdezések esetében, amelyek ugyanazon tábla vagy indexelt nézetben több oszlopot ad vissza. A sűrűségvektor egy sűrűséget tartalmaz a statisztikai objektum egyes oszlopelőtagjaihoz. Ha például egy statisztikai objektumban a kulcsoszlopok CustomerId, ItemId és Price, a sűrűség kiszámítása az alábbi oszlopelőtagok mindegyikén történik.

Oszlopelőtag Sűrűség számítása:
(CustomerId) A CustomerId egyező értékeket tartalmazó sorok
(CustomerId, ItemId) A CustomerId és ItemId egyező értékekkel rendelkező sorok
(CustomerId, ItemId, Price) A CustomerId, ItemIdés Price egyező értékekkel rendelkező sorok

Korlátozások

DBCC SHOW_STATISTICS nem ad statisztikai adatokat a térbeli indexekhez és a memóriaoptimalizált oszlopcentrikus indexekhez.

Az SQL Server és az SQL Database engedélyei

A statisztikai objektum megtekintéséhez a felhasználónak rendelkeznie kell SELECT engedéllyel a táblában.

A következő követelmények vonatkoznak arra, SELECT hogy az engedélyek elegendőek legyenek a parancs futtatásához:

  • A felhasználóknak engedélyekkel kell rendelkezniük a statisztikai objektum összes oszlopához.
  • A felhasználóknak engedéllyel kell rendelkezniük egy szűrőfeltétel összes oszlopára (ha van ilyen).
  • A tábla nem rendelkezhet sorszintű biztonsági szabályzattal.
  • Ha a statisztikai objektum bármelyik oszlopa dinamikus adatmaszkolási szabályokkal van elfedve, a SELECT engedély mellett a felhasználónak rendelkeznie kell a UNMASK engedéllyel, vagy a db_ddladmin szerepkör tagjának kell lennie.

Az SQL Server 2012 (11.x) Service Pack 1 szervizcsomag előtti verziókban a felhasználónak rendelkeznie kell a táblával, vagy a felhasználónak tagja kell lennie a sysadmin rögzített kiszolgálói szerepkörnek, a db_owner rögzített adatbázis-szerepkörnek vagy a db_ddladmin rögzített adatbázis-szerepkörnek. Ha vissza szeretné változtatni a viselkedést az SQL Server 2012 előtti (11.x) Service Pack 1 viselkedésre, használja a 9485-ös nyomkövetési jelzőt.

A Microsoft Fabric Data Warehouse és az SQL Analytics végpontjának engedélyei a Microsoft Fabricben

Ahhoz, hogy megtekinthesse a statisztikai objektumot a Fabric Data Warehouse-ban vagy az SQL Analytics-végpontban, a felhasználónak rendelkeznie kell a SELECT táblára vonatkozó engedéllyel, vagy a Viewer Fabric munkaterületi szerepkör tagjának vagy magasabb szerepkör-tagsággal kell rendelkeznie.

Permissions for Azure Synapse Analytics

DBCC SHOW_STATISTICS SELECT engedélyt igényel a táblához vagy tagsághoz a sysadmin rögzített kiszolgálói szerepkörben, a db_owner rögzített adatbázis-szerepkörben vagy a db_ddladmin rögzített adatbázis-szerepkörben.

Limitations and Restrictions for Azure Synapse Analytics

DBCC SHOW_STATISTICS az Shell-adatbázisban a Control csomópont szintjén tárolt statisztikákat jeleníti meg. Nem jeleníti meg az SQL Server által automatikusan létrehozott statisztikákat a számítási csomópontokon.

DBCC SHOW_STATISTICS külső táblák nem támogatottak.

A Microsoft Fabric DBCC SHOW_STATISTICS Warehouse-ban csak a hisztogramstatisztikák eredményeit jeleníti meg, a statisztikákat nem ACE-* .

Példák: SQL Server, Azure SQL Database és SQL Database a Fabricben

Egy. Az összes statisztikai adat visszaadása

Az alábbi példa az AdventureWorks2025 adatbázis táblázatának indexének AK_Address_rowguid összes statisztikai információját Person.Address mutatja.

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

B. A HISZTOGRAM beállítás megadása

Ez a Customer_LastName megjelenített statisztikai adatokat a HISZTOGRAM-adatokra korlátozza.

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

Példák: Azure Synapse Analytics

C. Egy statisztikai objektum tartalmának megjelenítése

Az alábbi példa létrehoz egy statisztikai objektumot, majd megjeleníti a Customer_LastName statisztikáinak tartalmát a DimCustomer táblában az AdventureWorksPDW2022 mintaadatbázisban.

-- 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

Az eredmények a fejlécet, a sűrűségvektort és a hisztogram egy részét mutatják.

Képernyőkép a DBCC SHOW_STATISTICS eredményeiről.