Condividi tramite


DBCC SHOW_STATISTICS (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW) Endpoint di analisi SQL in Microsoft Fabric Warehouse in Microsoft Fabric

Visualizza le statistiche di ottimizzazione delle query correnti per una tabella o vista indicizzata. Query Optimizer usa le statistiche per stimare la cardinalità o il numero di righe nel risultato delle query al fine di creare un piano di query di qualità elevata. Query Optimizer potrebbe ad esempio usare le stime relative alla cardinalità per scegliere l'operatore Index Seek anziché l'operatore Index Scan nel piano di query, evitando un'operazione di analisi dell'indice che usa un numero elevato di risorse e migliorando di conseguenza le prestazioni delle query.

Query Optimizer archivia le statistiche relative a una tabella oppure a una vista indicizzata in un oggetto statistiche. Per una tabella, l'oggetto statistiche viene creato in un indice oppure in un elenco di colonne della tabella. L'oggetto statistiche è costituito da un'intestazione con metadati relativi alle statistiche, un istogramma con la distribuzione dei valori nella prima colonna chiave dell'oggetto stesso e un vettore di densità per misurare la correlazione tra colonne. Il motore di database può calcolare le stime relative alla cardinalità con qualsiasi dato contenuto nell'oggetto statistiche. Per altre informazioni, vedere Statistiche e Stima della cardinalità (SQL Server).

DBCC SHOW_STATISTICS visualizza l'intestazione, l'istogramma e il vettore di densità in base ai dati archiviati nell'oggetto statistiche. La sintassi consente inoltre di specificare una tabella o una vista indicizzata con un nome di colonna, un nome di statistiche o un nome di indice di destinazione.

Aggiornamenti importanti nelle versioni precedenti di SQL Server:

  • A partire da SQL Server 2012 (11.x) Service Pack 1, la vista a gestione dinamica sys.dm_db_stats_properties è disponibile per recuperare a livello di codice le informazioni sull'intestazione contenute nell'oggetto statistiche per le statistiche non incrementali.

  • A partire da SQL Server 2014 (12.x) Service Pack 2 e SQL Server 2012 (11.x) Service Pack 1, la vista a gestione dinamica sys.dm_db_incremental_stats_properties è disponibile per recuperare le informazioni di intestazione contenute nell'oggetto statistiche per le statistiche incrementali.

  • A partire da SQL Server 2016 (13.x) Service Pack 1 CU 2, la vista a gestione dinamica sys.dm_db_stats_histogram è disponibile per recuperare a livello di codice le informazioni sull'istogramma contenute nell'oggetto statistiche.

  • Questa sintassi non è supportata da pool SQL serverless in Azure Synapse Analytics.

  • Per altre informazioni sulle statistiche in Microsoft Fabric, vedere Statistiche.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

Sintassi per SQL Server e database SQL di Azure:

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

Sintassi per Azure Synapse Analytics, Platform System (PDW) e Microsoft Fabric:

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

Argomenti

table_or_indexed_view_name

Nome della tabella o della vista indicizzata per la quale visualizzare le informazioni statistiche.

table_name

Nome della tabella contenente la statistica da visualizzare. La tabella non può essere una tabella esterna.

target

Nome dell'indice, delle statistiche o della colonna per cui visualizzare le informazioni statistiche. L'oggetto target è racchiuso tra parentesi quadre, virgolette singole, virgolette doppie o viene inserito senza virgolette.

  • Se l'oggetto target è il nome di un indice o di statistiche esistenti in una tabella o in una vista indicizzata, vengono restituite le relative informazioni statistiche.
  • Se target è il nome di una colonna esistente e per tale colonna esiste un oggetto statistiche creato automaticamente, vengono restituite le informazioni relative a tali statistiche.

Se non esiste una statistica creata automaticamente per una destinazione di colonna, viene restituito il messaggio di errore 2767.

In Azure Synapse Analytics and Analytics Platform System (PDW) la destinazione non può essere un nome di colonna.

In Warehouse in Microsoft Fabric la destinazione può essere il nome di un istogramma a colonna singola o di una colonna. Se per la destinazione viene usato un nome di colonna, questo comando restituisce informazioni di distribuzione solo sulla statistica istogramma generata automaticamente. Per visualizzare le informazioni su una statistica istogramma creata manualmente, specificare il nome delle statistiche come destinazione.

NO_INFOMSGS

Evita la visualizzazione di tutti i messaggi informativi con livello di gravità compreso tra 0 e 10.

STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM [ , n ]

Specificando una o più opzioni tra quelle disponibili è possibile limitare i set di risultati restituiti dall'istruzione all'opzione o alle opzioni specificate. Se non si specifica alcuna opzione, vengono restituite tutte le informazioni statistiche.

STATS_STREAM è identificato solo a scopo informativo. Non supportato. Non è garantita la compatibilità con le versioni future.

Set di risultati

Nella tabella seguente vengono descritte le colonne restituite nel set di risultati quando si specifica l'opzione STAT_HEADER.

Nome colonna Descrizione
Name Nome dell'oggetto statistiche.
Aggiornato Data e ora dell'ultimo aggiornamento delle statistiche. La funzione STATS_DATE rappresenta un metodo alternativo per il recupero di queste informazioni. Per altre informazioni, vedere la sezione Osservazioni più avanti nella pagina.
Righe Numero totale di righe della tabella o della vista indicizzata al momento dell'ultimo aggiornamento delle statistiche. Se le statistiche vengono filtrate o corrispondono a un indice filtrato, il numero di righe potrebbe essere inferiore al numero di righe della tabella. Per ulteriori informazioni, vedi Statistiche.
Rows Sampled Numero totale di righe campionate per i calcoli statistici. Se Rows Sampled < Rows, l'istogramma e i risultati relativi alla densità visualizzati vengono stimati in base alle righe campionate.
Passaggi Numero di intervalli nell'istogramma. Ogni intervallo comprende un insieme di valori di colonna seguiti da un valore di colonna pari al limite superiore. Gli intervalli dell'istogramma vengono definiti nella prima colonna chiave delle statistiche. Il numero massimo di intervalli è 200.
Densità Valore calcolato come 1/ valori distinct per tutti i valori nella prima colonna chiave dell'oggetto statistiche, ad eccezione dei valori limite dell'istogramma. Questo valore di densità non viene usato da Query Optimizer e viene visualizzato per garantire la compatibilità con le versioni precedenti a SQL Server 2008 (10.0.x).
Average Key Length Numero medio di byte per valore per tutte le colonne chiave nell'oggetto statistiche.
String Index Il valore Yes indica che l'oggetto statistiche contiene statistiche di riepilogo delle stringhe per migliorare le stime relative alla cardinalità per i predicati della query che utilizzano l'operatore LIKE, ad esempio WHERE ProductName LIKE '%Bike'. Le statistiche di riepilogo delle stringhe vengono archiviate separatamente dall'istogramma e vengono create nella prima colonna chiave dell'oggetto statistiche quando è di tipo char, varchar, nchar, nvarchar, varchar(max), nvarchar(max), text o ntext..
Espressione filtro Predicato per il subset di righe della tabella incluso nell'oggetto statistiche. NULL = statistiche non filtrate. Per altre informazioni sui predicati di filtro, vedere Creare indici filtrati. Per altre informazioni sulle statistiche filtrate, vedere Statistiche.
Unfiltered Rows Numero totale di righe nella tabella prima dell'applicazione dell'espressione di filtro. Se l'espressione di filtro è NULL, Unfiltered Rows è uguale a Rows.
Persisted Sample Percent Percentuale di campionamento persistente usata per gli aggiornamenti delle statistiche che non specificano in modo esplicito una percentuale di campionamento. Se il valore è zero, non viene impostata alcuna percentuale di campionamento persistente per la statistica.

Si applica a: SQL Server 2016 (13.x) Service Pack 1 CU 4

Nella tabella seguente vengono descritte le colonne restituite nel set di risultati quando si specifica l'opzione DENSITY_VECTOR.

Nome colonna Descrizione
All Density Il valore Density viene calcolato come 1/ valori distinct. Nei risultati la densità viene visualizzata per ogni prefisso di colonna dell'oggetto statistiche, una riga per ogni densità. Un valore distinct è un elenco distinto dei valori delle colonne per riga e per prefisso di colonna. Se l'oggetto statistiche contiene, ad esempio, le colonne chiave (A, B, C), i risultati restituiscono la densità degli elenchi di valori distinct in ognuno di tali prefissi di colonna, ovvero (A), (A, B) e (A, B, C). Utilizzando il prefisso (A, B, C), ciascuno di questi elenchi è un elenco di valori distinct, ovvero (3, 5, 6), (4, 4, 6), (4, 5, 6), (4, 5, 7). Utilizzando il prefisso (A, B) agli stessi valori di colonna sono associati gli elenchi di valori distinct (3, 5), (4, 4) e (4, 5).
Average Length Lunghezza media, in byte, per archiviare un elenco di valori di colonna per il prefisso di colonna. Se per ogni valore presente nell'elenco (3, 5, 6), ad esempio, sono necessari 4 byte, la lunghezza media è di 12 byte.
Colonne Nomi delle colonne nel prefisso per cui sono visualizzati i valori di All Density e Average Length.

Nella tabella seguente vengono descritte le colonne restituite nel set di risultati quando si specifica l'opzione HISTOGRAM.

Nome colonna Descrizione
RANGE_HI_KEY Valore di colonna pari al limite superiore per un intervallo dell'istogramma. Il valore di colonna viene denominato anche valore chiave.
RANGE_ROWS Numero stimato di righe il cui valore di colonna è compreso in un intervallo dell'istogramma, escluso il limite superiore.
EQ_ROWS Numero stimato di righe il cui valore di colonna è uguale al limite superiore dell'intervallo dell'istogramma.
DISTINCT_RANGE_ROWS Numero stimato di righe con un valore distinct di colonna compreso in un intervallo dell'istogramma, escluso il limite superiore.
AVG_RANGE_ROWS Numero medio di righe con un valore di colonna duplicato compreso in un intervallo dell'istogramma, escluso il limite superiore. Quando DISTINCT_RANGE_ROWS è maggiore di 0, AVG_RANGE_ROWS viene calcolato dividendo RANGE_ROWS per DISTINCT_RANGE_ROWS. Quando DISTINCT_RANGE_ROWS è 0, AVG_RANGE_ROWS restituisce 1 per l'intervallo dell'istogramma.

Osservazioni:

La data di aggiornamento delle statistiche viene archiviata nell'oggetto BLOB di statistiche insieme all'istogramma e al vettore di densità, non nei metadati. Quando non vengono letti dati per generare dati delle statistiche, il BLOB delle statistiche non viene creato, la data non è disponibile e la colonna aggiornata è NULL. Questo è il caso per le statistiche filtrate per cui il predicato non restituisce righe o per le nuove tabelle vuote.

Istogramma

Un istogramma misura la frequenza di occorrenza per ogni valore distinct in un set di dati. Query Optimizer calcola un istogramma nei valori di colonna nella prima colonna chiave dell'oggetto statistiche, selezionando i valori di colonna tramite il campionamento statistico delle righe o un'analisi completa di tutte le righe della tabella o della vista. Se l'istogramma viene creato da un set di righe campionato, i totali archiviati per il numero di righe e il numero di valori distinti sono stime e non devono essere interi.

Per creare l'istogramma, Query Optimizer ordina i valori di colonna, calcola il numero di valori che corrispondono a ogni valore distinct di colonna, quindi aggrega i valori di colonna in un massimo di 200 intervalli contigui dell'istogramma. Ogni intervallo comprende un insieme di valori di colonna seguiti da un valore di colonna pari al limite superiore. Nell'insieme sono inclusi tutti i possibili valori di colonna compresi tra i valori limite, esclusi questi ultimi. Il minore tra i valori di colonna ordinati costituisce il limite superiore per il primo intervallo dell'istogramma.

Nel diagramma seguente viene illustrato un istogramma con sei intervalli. L'area a sinistra del primo valore limite superiore è il primo intervallo.

Diagramma di come viene calcolato un istogramma a partire da valori di colonna campionati.

Per ogni intervallo dell'istogramma:

  • La riga in grassetto rappresenta il valore limite superiore (RANGE_HI_KEY) e il relativo numero di occorrenze (EQ_ROWS).
  • L'area a tinta unita a sinistra di RANGE_HI_KEY rappresenta l'insieme di valori di colonna e il numero medio di occorrenze di ciascun valore (AVG_RANGE_ROWS) di colonna. Il valore AVG_RANGE_ROWS per il primo intervallo dell'istogramma è sempre 0.
  • Le linee punteggiate rappresentano i valori campionati utilizzati per stimare il numero complessivo dei valori distinct nell'insieme (DISTINCT_RANGE_ROWS) e il numero complessivo dei valori nell'insieme (RANGE_ROWS). Query Optimizer usa RANGE_ROWS e DISTINCT_RANGE_ROWS per calcolare AVG_RANGE_ROWS e non archivia i valori campionati.

Query Optimizer definisce gli intervalli dell'istogramma in base al relativo significato statistico e utilizza un algoritmo per il calcolo della differenza massima per ridurre al minimo il numero di intervalli nell'istogramma, aumentando contemporaneamente la differenza tra i valori limite. Il numero massimo di intervalli è 200. Il numero di intervalli dell'istogramma può essere minore del numero di valori distinct, anche per le colonne con un numero di punti limite inferiore a 200. A una colonna con 100 valori distinct, ad esempio, può essere associato un istogramma con un numero di punti limite inferiore a 100.

Vettore di densità

Per ottimizzare le stime relative alla cardinalità per query che restituiscono più colonne della stessa tabella o vista indicizzata, Query Optimizer utilizza le densità. Il vettore di densità contiene una densità per ogni prefisso di colonna nell'oggetto statistiche. Se in un oggetto statistiche, ad esempio, sono presenti le colonne chiave CustomerId, ItemId e Price, la densità viene calcolata per ognuno dei prefissi di colonna seguenti.

Prefisso di colonna Densità calcolata su
(CustomerId) Righe con valori corrispondenti per CustomerId
(CustomerId, ItemId) Righe con valori corrispondenti per CustomerId e ItemId
(CustomerId, ItemId, Price) Righe con valori corrispondenti per CustomerId, ItemId e Price

Limiti

DBCC SHOW_STATISTICS non fornisce statistiche per gli indici spaziali né gli indici columnstore ottimizzati per la memoria.

Autorizzazioni per SQL Server e database SQL

Per visualizzare l'oggetto statistiche, l'utente deve avere l'autorizzazione SELECT per la tabella.

Affinché le autorizzazioni SELECT siano sufficienti per eseguire il comando, sono richiesti i requisiti seguenti:

  • Gli utenti devono disporre delle autorizzazioni su tutte le colonne nell'oggetto statistiche
  • Gli utenti devono disporre dell'autorizzazione su tutte le colonne in una condizione di filtro, se esistente
  • La tabella non può avere criteri di sicurezza a livello di riga.
  • Se una delle colonne all'interno di un oggetto statistiche è mascherata con regole Dynamic Data Masking, oltre all'autorizzazione SELECT , l'utente deve disporre dell'autorizzazione UNMASK o essere membro del ruolo db_ddladmin .

Nelle versioni precedenti a SQL Server 2012 (11.x) Service Pack 1, l'utente deve essere proprietario della tabella o l'utente deve essere membro del ruolo predefinito del server sysadmin , del ruolo predefinito del database db_owner o del ruolo predefinito del database db_ddladmin .

Nota

Per ripristinare il comportamento precedente a SQL Server 2012 (11.x) comportamento di Service Pack 1, usare il flag di traccia 9485.

Autorizzazioni per Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)

DBCC SHOW_STATISTICS richiede SELECT l'autorizzazione per la tabella o l'appartenenza al ruolo predefinito del server sysadmin , al ruolo predefinito del database db_owner o al ruolo predefinito del database db_ddladmin .

Limitazioni e restrizioni per Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)

DBCC SHOW_STATISTICS mostra le statistiche archiviate nel Shell database a livello di nodo di controllo. Non mostra statistiche create automaticamente da SQL Server nei nodi di calcolo.

DBCC SHOW_STATISTICS non è supportato nelle tabelle esterne.

In Microsoft Fabric DBCC SHOW_STATISTICS vengono visualizzati solo i risultati per le statistiche dell'istogramma, non le statistiche ACE-*.

Esempi: SQL Server e database SQL di Azure

R. Restituisce tutte le informazioni statistiche

Nell'esempio seguente vengono visualizzate tutte le informazioni sulle statistiche per l'indice AK_Address_rowguid della Person.Address tabella nel database AdventureWorks2022.

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

B. Specificare l'opzione HISTOGRAM

In questo modo le informazioni statistiche visualizzate per Customer_LastName vengono limitate ai dati HISTOGRAM.

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

Esempi: Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)

C. Visualizzare il contenuto di un oggetto statistiche

Nell'esempio seguente viene creato un oggetto statistiche e quindi viene visualizzato il contenuto delle Customer_LastName statistiche nella DimCustomer tabella nel database di esempio AdventureWorksPDW2022 .

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

Nei risultati vengono visualizzati l'intestazione, il vettore di densità e parte dell'istogramma.

Screenshot che mostra i risultati di DBCC SHOW_STATISTICS.

Vedi anche

Passaggi successivi