Delen via


DBCC-SHOW_STATISTICS (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft FabricSQL-database in Microsoft Fabric Preview

Geeft de huidige statistieken voor queryoptimalisatie weer voor een tabel of geïndexeerde weergave. De queryoptimalisatie maakt gebruik van statistieken om de kardinaliteit of het aantal rijen in het queryresultaat te schatten, waardoor queryoptimalisatie een queryplan van hoge kwaliteit kan maken. Query Optimizer kan bijvoorbeeld kardinaliteitschattingen gebruiken om de indexzoekoperator te kiezen in plaats van de indexscanoperator in het queryplan, waardoor de queryprestaties worden verbeterd door een resource-intensieve indexscan te voorkomen.

Query Optimizer slaat statistieken op voor een tabel of geïndexeerde weergave in een statistiekenobject. Voor een tabel wordt het statistiekenobject gemaakt op een index of een lijst met tabelkolommen. Het statistiekenobject bevat een koptekst met metagegevens over de statistieken, een histogram met de verdeling van waarden in de eerste sleutelkolom van het statistiekenobject en een dichtheidsvector om correlatie tussen kolommen te meten. De database-engine kan kardinaliteitschattingen berekenen met een van de gegevens in het statistiekenobject. Zie Statistieken en Kardinaliteitschatting (SQL Server) voor meer informatie.

DBCC SHOW_STATISTICS geeft de header, histogram en dichtheidsvector weer op basis van gegevens die zijn opgeslagen in het statistiekenobject. Met de syntaxis kunt u een tabel of geïndexeerde weergave opgeven, samen met de naam van de doelindex, de naam van de statistieken of de kolomnaam.

Belangrijke updates in eerdere versies van SQL Server:

  • Vanaf SQL Server 2012 (11.x) Service Pack 1 is de sys.dm_db_stats_properties dynamische beheerweergave beschikbaar voor het programmatisch ophalen van headergegevens in het statistiekenobject voor niet-incrementele statistieken.

  • Vanaf SQL Server 2014 (12.x) Service Pack 2 en SQL Server 2012 (11.x) Service Pack 1 is de sys.dm_db_incremental_stats_properties dynamische beheerweergave beschikbaar voor het programmatisch ophalen van headergegevens in het statistiekenobject voor incrementele statistieken.

  • Vanaf SQL Server 2016 (13.x) Service Pack 1 CU 2 is de sys.dm_db_stats_histogram dynamische beheerweergave beschikbaar voor het programmatisch ophalen van histogramgegevens in het statistiekenobject.

  • Deze syntaxis wordt niet ondersteund door een serverloze SQL-pool in Azure Synapse Analytics.

  • Zie Statistieken voor meer informatie over statistieken in Microsoft Fabric Data Warehouse.

Transact-SQL syntaxis-conventies

Syntaxis

Syntaxis voor SQL Server, Azure SQL Database en SQL Database in Fabric:

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

Syntaxis voor Azure Synapse Analytics, Analytics Platform System (PDW) en Warehouse in Microsoft Fabric:

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

Argumenten

table_or_indexed_view_name

Naam van de tabel of geïndexeerde weergave waarvoor statistiekengegevens moeten worden weergegeven.

table_name

De naam van de tabel die de statistieken bevat die moeten worden weergegeven. De tabel kan geen externe tabel zijn.

doeldoel

Naam van de index, statistieken of kolom waarvoor statistiekengegevens moeten worden weergegeven. doel staat tussen haakjes, enkele aanhalingstekens, dubbele aanhalingstekens of geen aanhalingstekens.

  • Als het doel een naam is van een bestaande index of statistieken in een tabel of geïndexeerde weergave, worden de statistieken over dit doel geretourneerd.
  • Als het doel de naam is van een bestaande kolom en er een automatisch gemaakt statistiekenobject in deze kolom bestaat, wordt informatie over die automatisch gemaakte statistiek geretourneerd.

Als er geen automatisch gemaakte statistiek bestaat voor een kolomdoel, wordt foutbericht 2767 geretourneerd.

In Azure Synapse Analytics and Analytics Platform System (PDW) kan het doel geen kolomnaam zijn.

In Warehouse in Microsoft Fabric kan het doel de naam zijn van een histogramstatistieken met één kolom of een kolom. Als een kolomnaam wordt gebruikt voor het doel, retourneert deze opdracht alleen distributiegegevens over de automatisch gegenereerde histogramstatistiek. Als u de informatie over een handmatig gemaakte histogramstatistiek wilt weergeven, geeft u de naam van de statistieken op als doel.

NO_INFOMSGS

Onderdrukt alle informatieve berichten met ernstniveaus van 0 tot en met 10.

STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM [ , n ]

Als u een of meer van deze opties opgeeft, worden de resultatensets die door de instructie worden geretourneerd, beperkt tot de opgegeven optie of opties. Als er geen opties zijn opgegeven, worden alle statistische gegevens geretourneerd.

STATS_STREAM wordt alleen ter informatie geïdentificeerd. Wordt niet ondersteund. Toekomstige compatibiliteit is niet gegarandeerd.

Resultaatset

In de volgende tabel worden de kolommen beschreven die worden geretourneerd in de resultatenset wanneer STAT_HEADER is opgegeven.

Kolomnaam Beschrijving
Naam Naam van het statistiekenobject.
Bijgewerkt Datum en tijd waarop de statistieken voor het laatst zijn bijgewerkt. De functie STATS_DATE is een alternatieve manier om deze informatie op te halen. Zie de sectie Opmerkingen op deze pagina voor meer informatie.
Rijen Totaal aantal rijen in de tabel of geïndexeerde weergave wanneer de statistieken voor het laatst zijn bijgewerkt. Als de statistieken worden gefilterd of overeenkomen met een gefilterde index, kan het aantal rijen kleiner zijn dan het aantal rijen in de tabel. Zie Statistieken voor meer informatie.
Rijen gesampampeerd Totaal aantal rijen dat is gesampleerd voor berekeningen van statistieken. Als er < rijen zijn bemonsterd, worden de histogram- en dichtheidsresultaten geschat op basis van deze bemonsterde rijen.
Stappen Aantal stappen in het histogram. Elke stap omvat een bereik van kolomwaarden, gevolgd door een bovengrenskolomwaarde. De histogramstappen worden gedefinieerd op de eerste belangrijke kolom in de statistieken. Het maximum aantal stappen is 200.
Dichtheid Berekend als 1/afzonderlijke waarden voor alle waarden in de eerste sleutelkolom van het statistiekenobject, met uitzondering van de histogramgrenswaarden. Deze dichtheidswaarde wordt niet gebruikt door de Query Optimizer en wordt weergegeven voor achterwaartse compatibiliteit met versies vóór SQL Server 2008 (10.0.x).
Gemiddelde sleutellengte Het gemiddelde aantal bytes per waarde voor alle sleutelkolommen in het statistiekenobject.
Tekenreeksindex Ja geeft aan dat het statistiekenobject samenvattingsstatistieken bevat om de kardinaliteitschattingen te verbeteren voor querypredicaten die gebruikmaken van de LIKE-operator; bijvoorbeeld WHERE ProductName LIKE '%Bike'. Samenvattingsstatistieken van tekenreeksen worden afzonderlijk van het histogram opgeslagen en worden gemaakt in de eerste sleutelkolom van het statistiekenobject wanneer het van het type char, varchar, nchar, nvarchar(max), nvarchar(max), tekst of ntext.
Filterexpressie Predicaat voor de subset van tabelrijen die zijn opgenomen in het statistiekenobject. NULL = niet-gefilterde statistieken. Zie Gefilterde indexen maken voor meer informatie over gefilterde predicaten. Zie Statistieken voor meer informatie over gefilterde statistieken.
Niet-gefilterde rijen Totaal aantal rijen in de tabel voordat u de filterexpressie toepast. Als filterexpressie is NULL, Unfiltered Rows is deze gelijk aan Rows.
Persistent steekproefpercentage Persistent steekproefpercentage dat wordt gebruikt voor statistische updates die niet expliciet een steekproefpercentage opgeven. Als de waarde nul is, wordt er geen persistent steekproefpercentage ingesteld voor deze statistiek.

Van toepassing op: SQL Server 2016 (13.x) Service Pack 1 CU 4

In de volgende tabel worden de kolommen beschreven die worden geretourneerd in de resultatenset wanneer DENSITY_VECTOR deze is opgegeven.

Kolomnaam Beschrijving
Alle dichtheid De dichtheid is 1/unieke waarden. Resultaten geven de dichtheid weer voor elk voorvoegsel van kolommen in het statistiekenobject, één rij per dichtheid. Een afzonderlijke waarde is een afzonderlijke lijst met de kolomwaarden per rij en per kolomvoorvoegsel. Als het statistiekenobject bijvoorbeeld sleutelkolommen (A, B, C) bevat, rapporteren de resultaten de dichtheid van de afzonderlijke lijsten met waarden in elk van deze kolomvoorvoegsels: (A), (A,B) en (A, B, C). Door het gebruik van het voorvoegsel (A, B, C) is elke van deze lijsten een afzonderlijke waardenlijst: (3, 5, 6), (4, 4, 6), (4, 5, 6), (4, 5, 7). Met het voorvoegsel (A, B) hebben dezelfde kolomwaarden de volgende unieke waardenlijsten: (3, 5), (4, 4) en (4, 5)
Gemiddelde lengte Gemiddelde lengte, in bytes, om een lijst met de kolomwaarden voor het kolomvoorvoegsel op te slaan. Als de waarden in de lijst (3, 5, 6) bijvoorbeeld 4 bytes vereisen, is de lengte 12 bytes.
Kolommen Namen van kolommen in het voorvoegsel waarvoor alle dichtheid en gemiddelde lengte worden weergegeven.

In de volgende tabel worden de kolommen beschreven die worden geretourneerd in de resultatenset wanneer de HISTOGRAM optie is opgegeven.

Kolomnaam Beschrijving
RANGE_HI_KEY Bovengrens kolomwaarde voor een histogram stap. De kolomwaarde wordt ook wel een sleutelwaarde genoemd.
RANGE_ROWS Geschat aantal rijen waarvan de kolomwaarde binnen een histogramstap valt, met uitzondering van de bovengrens.
EQ_ROWS Geschat aantal rijen waarvan de kolomwaarde gelijk is aan de bovengrens van de histogramstap.
DISTINCT_RANGE_ROWS Geschat aantal rijen met een afzonderlijke kolomwaarde binnen een histogramstap, met uitzondering van de bovengrens.
AVG_RANGE_ROWS Het gemiddelde aantal rijen met dubbele kolomwaarden binnen een histogramstap, met uitzondering van de bovengrens. Wanneer DISTINCT_RANGE_ROWS groter is dan 0, AVG_RANGE_ROWS wordt berekend door delen RANGE_ROWS door DISTINCT_RANGE_ROWS. Wanneer DISTINCT_RANGE_ROWS is 0, AVG_RANGE_ROWS retourneert 1 voor de histogramstap.

Opmerkingen

De updatedatum van statistieken wordt samen met het histogram en de dichtheidsvector opgeslagen in het blobobject voor statistieken, niet in de metagegevens. Wanneer er geen gegevens worden gelezen om statistiekengegevens te genereren, wordt de blob voor statistieken niet gemaakt, is de datum niet beschikbaar en is updatedde NULL kolom . Dit is het geval voor gefilterde statistieken waarvoor het predicaat geen rijen retourneert of voor nieuwe lege tabellen.

Histogram

Een histogram meet de frequentie van het optreden voor elke afzonderlijke waarde in een gegevensset. De queryoptimalisatie berekent een histogram op de kolomwaarden in de eerste sleutelkolom van het statistiekenobject, waarbij de kolomwaarden worden geselecteerd door de rijen statistisch te nemen of door een volledige scan van alle rijen in de tabel of weergave uit te voeren. Als het histogram wordt gemaakt op basis van een steekproefset rijen, zijn de opgeslagen totalen voor het aantal rijen en het aantal afzonderlijke waarden schattingen en hoeven ze geen gehele gehele getallen te zijn.

Als u het histogram wilt maken, worden de kolomwaarden door de queryoptimalisatie gesorteerd, wordt het aantal waarden berekend dat overeenkomt met elke afzonderlijke kolomwaarde en worden de kolomwaarden vervolgens samengevoegd tot maximaal 200 aaneengesloten histogramstappen. Elke stap bevat een bereik van kolomwaarden gevolgd door een bovengrenskolomwaarde. Het bereik bevat alle mogelijke kolomwaarden tussen grenswaarden, met uitzondering van de grenswaarden zelf. Het laagste van de gesorteerde kolomwaarden is de bovenste grenswaarde voor de eerste histogramstap.

In het volgende diagram ziet u een histogram met zes stappen. Het gebied links van de eerste bovengrenswaarde is de eerste stap.

Diagram van hoe een histogram wordt berekend op basis van waarden in de steekproefkolom.

Voor elke histogramstap:

  • Vetgedrukte lijn vertegenwoordigt de bovengrenswaarde (RANGE_HI_KEY) en het aantal keren dat deze plaatsvindt (EQ_ROWS)
  • Effen gebied links van RANGE_HI_KEY staat voor het bereik van kolomwaarden en het gemiddelde aantal keren dat elke kolomwaarde voorkomt (AVG_RANGE_ROWS). De AVG_RANGE_ROWS voor de eerste histogramstap is altijd 0.
  • Stippellijnen vertegenwoordigen de voorbeeldwaarden die worden gebruikt om het totale aantal afzonderlijke waarden in het bereik (DISTINCT_RANGE_ROWS) en het totale aantal waarden in het bereik (RANGE_ROWS) te schatten. De queryoptimalisatie gebruikt RANGE_ROWS en DISTINCT_RANGE_ROWS om AVG_RANGE_ROWS te berekenen en slaat de voorbeeldwaarden niet op.

De queryoptimalisatie definieert de histogramstappen op basis van hun statistische significantie. Er wordt een maximumverschil algoritme gebruikt om het aantal stappen in het histogram te minimaliseren en tegelijkertijd het verschil tussen de grenswaarden te maximaliseren. Het maximum aantal stappen is 200. Het aantal histogramstappen kan kleiner zijn dan het aantal afzonderlijke waarden, zelfs voor kolommen met minder dan 200 grenspunten. Een kolom met 100 afzonderlijke waarden kan bijvoorbeeld een histogram met minder dan 100 grenspunten hebben.

Dichtheidsvector

De queryoptimalisatie maakt gebruik van densiteiten om kardinaliteitschattingen te verbeteren voor query's die meerdere kolommen retourneren uit dezelfde tabel of geïndexeerde weergave. De dichtheidsvector bevat één dichtheid voor elk voorvoegsel van kolommen in het statistiekenobject. Als een statistiekenobject bijvoorbeeld de sleutelkolommen CustomerIdItemId bevat en Pricede dichtheid wordt berekend op elk van de volgende kolomvoorvoegsels.

Kolomvoorvoegsel Dichtheid berekend op
(CustomerId) Rijen met overeenkomende waarden voor CustomerId
(CustomerId, ItemId) Rijen met overeenkomende waarden voor CustomerId en ItemId
(CustomerId, ItemId, Price) Rijen met overeenkomende waarden voor CustomerId, ItemIden Price

Beperkingen

DBCC SHOW_STATISTICS biedt geen statistieken voor ruimtelijke indexen en voor geheugen geoptimaliseerde columnstore-indexen.

Machtigingen voor SQL Server en SQL Database

Als u het statistiekenobject wilt weergeven, moet de gebruiker over de SELECT machtiging voor de tabel beschikken.

Er zijn de volgende vereisten voor SELECT machtigingen die voldoende zijn om de opdracht uit te voeren:

  • Gebruikers moeten machtigingen hebben voor alle kolommen in het statistiekenobject.
  • Gebruikers moeten machtigingen hebben voor alle kolommen in een filtervoorwaarde (indien aanwezig).
  • De tabel kan geen beveiligingsbeleid op rijniveau hebben.
  • Als een van de kolommen in een statistiekenobject wordt gemaskeerd met regels voor dynamische gegevensmaskering, moet de gebruiker naast de SELECT machtiging de UNMASK machtiging hebben of lid zijn van de db_ddladmin rol.

In versies vóór SQL Server 2012 (11.x) Service Pack 1 moet de gebruiker eigenaar zijn van de tabel of moet de gebruiker lid zijn van de vaste serverrol sysadmin , de db_owner vaste databaserol of de db_ddladmin vaste databaserol. Gebruik traceringsvlag 9485 om het gedrag weer te wijzigen in het pre-SQL Server 2012 -servicepack 1-gedrag (11.x).

Machtigingen voor Microsoft Fabric Data Warehouse en SQL Analytics-eindpunt

Als u het statistiekenobject wilt weergeven in Fabric Data Warehouse of het SQL-analyse-eindpunt, moet de gebruiker de SELECT machtiging voor de tabel hebben, of een lid van de werkruimterol Viewer Fabric of een hoger rollidmaatschap.

Machtigingen voor Azure Synapse Analytics en Analytics Platform System (PDW)

DBCC SHOW_STATISTICS vereist SELECT toestemming voor de tabel of het lidmaatschap van de vaste serverrol sysadmin , de db_owner vaste databaserol of de db_ddladmin vaste databaserol.

Beperkingen en beperkingen voor Azure Synapse Analytics en Analytics Platform System (PDW)

DBCC SHOW_STATISTICS geeft statistieken weer die zijn opgeslagen in de Shell database op het niveau van het beheerknooppunt. Er worden geen statistieken weergegeven die automatisch worden gemaakt door SQL Server op de rekenknooppunten.

DBCC SHOW_STATISTICS wordt niet ondersteund voor externe tabellen.

In Warehouse in Microsoft Fabric DBCC SHOW_STATISTICS worden alleen resultaten weergegeven voor histogramstatistieken, niet ACE-* statistieken.

Voorbeelden: SQL Server, Azure SQL Database en SQL Database in Fabric

Eén. Alle statistiekengegevens retourneren

In het volgende voorbeeld worden alle statistiekengegevens weergegeven voor de AK_Address_rowguid index van de Person.Address tabel in de Database AdventureWorks2022.

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

B. De optie HISTOGRAM opgeven

Dit beperkt de statistiekengegevens die worden weergegeven voor Customer_LastName de HISTOGRAM-gegevens.

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

Voorbeelden: Azure Synapse Analytics and Analytics Platform System (PDW)

C. De inhoud van één statistiekenobject weergeven

In het volgende voorbeeld wordt een statistiekenobject gemaakt en wordt vervolgens de inhoud van de Customer_LastName statistieken in de DimCustomer tabel in de voorbeelddatabase AdventureWorksPDW2022 weergegeven.

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

De resultaten tonen de koptekst, de dichtheidsvector en een deel van het histogram.

Schermopname van DBCC SHOW_STATISTICS resultaten.