DBCC SHOW_STATISTICS (Transact-SQL)
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
Azure Synapse Analytics
Analytics Platform System (PDW)
ponto de extremidade de análise SQL no Microsoft Fabric
Warehouse no Microsoft Fabric
Exibe estatísticas atuais de otimização de consulta para uma tabela ou exibição indexada. O otimizador de consulta usa estatísticas para estimar a cardinalidade ou o número de linhas no resultado da consulta, o que permite que o otimizador de consulta crie um plano de consulta de alta qualidade. Por exemplo, o Otimizador de Consulta pode usar estimativas de cardinalidade para escolher o operador de busca de índice em vez do operador de verificação de índice no plano de consulta, melhorando o desempenho da consulta ao evitar uma verificação de índice que consome muitos recursos.
O Otimizador de Consulta armazena estatísticas para uma tabela ou exibição indexada em um objeto de estatística. Para uma tabela, o objeto statistics é criado em um índice ou em uma lista de colunas de tabela. O objeto statistics inclui um cabeçalho com metadados sobre as estatísticas, um histograma com a distribuição de valores na primeira coluna-chave do objeto statistics e um vetor de densidade para medir a correlação entre colunas. O Mecanismo de Banco de Dados pode calcular estimativas de cardinalidade com qualquer um dos dados no objeto de estatística. Para obter mais informações, consulte Statistics e Cardinality Estimation (SQL Server).
DBCC SHOW_STATISTICS
exibe o cabeçalho, histograma e vetor de densidade com base nos dados armazenados no objeto statistics. A sintaxe permite especificar uma tabela ou exibição indexada junto com um nome de índice de destino, nome de estatísticas ou nome de coluna.
Atualizações importantes em versões anteriores do SQL Server:
A partir do SQL Server 2012 (11.x) Service Pack 1, o modo de exibição de gerenciamento dinâmico sys.dm_db_stats_properties está disponível para recuperar programaticamente informações de cabeçalho contidas no objeto statistics para estatísticas não incrementais.
A partir do SQL Server 2014 (12.x) Service Pack 2 e do SQL Server 2012 (11.x) Service Pack 1, o modo de exibição de gerenciamento dinâmico sys.dm_db_incremental_stats_properties está disponível para recuperar programaticamente informações de cabeçalho contidas no objeto statistics para estatísticas incrementais.
A partir do SQL Server 2016 (13.x) Service Pack 1 2, a exibição de gerenciamento dinâmico sys.dm_db_stats_histogram está disponível para recuperar programaticamente informações de histograma contidas no objeto de estatísticas.
-
Essa sintaxe não é suportada pelo pool SQL sem servidor no Azure Synapse Analytics.
Para obter mais informações sobre estatísticas no Microsoft Fabric, consulte Statistics.
Transact-SQL convenções de sintaxe
Sintaxe
Sintaxe do SQL Server e do Banco de Dados SQL do Azure:
DBCC SHOW_STATISTICS ( table_or_indexed_view_name , target )
[ WITH [ NO_INFOMSGS ] < option > [ , ...n ] ]
< option > ::=
STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM
[ ; ]
Sintaxe do Azure Synapse Analytics, Analytics Platform System (PDW) e Microsoft Fabric:
DBCC SHOW_STATISTICS ( table_name , target )
[ WITH { STAT_HEADER | DENSITY_VECTOR | HISTOGRAM } [ , ...n ] ]
[ ; ]
Argumentos
table_or_indexed_view_name
Nome da tabela ou vista indexada para a qual apresentar informações estatísticas.
table_name
Nome da tabela que contém as estatísticas a serem exibidas. A tabela não pode ser uma tabela externa.
alvo
Nome do índice, estatísticas ou coluna para o qual exibir informações estatísticas. de destino está entre parênteses, aspas simples, aspas duplas ou sem aspas.
- Se de destino for um nome de um índice ou estatísticas existentes em uma tabela ou exibição indexada, as informações estatísticas sobre esse destino serão retornadas.
- Se de destino for o nome de uma coluna existente e existir um objeto de estatísticas criado automaticamente nessa coluna, as informações sobre essa estatística criada automaticamente serão retornadas.
Se uma estatística criada automaticamente não existir para um destino de coluna, a mensagem de erro 2767 será retornada.
No Azure Synapse Analytics and Analytics Platform System (PDW), de destino não pode ser um nome de coluna.
No Warehouse no Microsoft Fabric, de destino pode ser o nome de uma estatística de histograma de coluna única ou uma coluna. Se um nome de coluna for usado para de destino, esse comando retornará informações de distribuição somente sobre a estatística de histograma gerada automaticamente. Para exibir as informações sobre uma estatística de histograma criada manualmente, especifique o nome da estatística como destino.
NO_INFOMSGS
Suprime todas as mensagens informativas com níveis de gravidade de 0 a 10.
STAT_HEADER | DENSITY_VETOR | HISTOGRAMA | STATS_STREAM [ , n ]
A especificação de uma ou mais dessas opções limita os conjuntos de resultados retornados pela instrução à opção ou opções especificadas. Se nenhuma opção for especificada, todas as informações estatísticas serão retornadas.
STATS_STREAM
é Identificado apenas para fins informativos. Não suportado. A compatibilidade futura não é garantida.
Conjunto de resultados
A tabela a seguir descreve as colunas retornadas no conjunto de resultados quando STAT_HEADER é especificado.
Nome da coluna | Descrição |
---|---|
Designação | Nome do objeto de estatística. |
Atualizado | Data e hora da última atualização das estatísticas. A função STATS_DATE é uma maneira alternativa de recuperar essas informações. Para obter mais informações, consulte a seção comentários nesta página. |
Linhas | Número total de linhas na tabela ou vista indexada quando as estatísticas foram atualizadas pela última vez. Se as estatísticas forem filtradas ou corresponderem a um índice filtrado, o número de linhas poderá ser menor do que o número de linhas na tabela. Para obter mais informações, consulte Statistics. |
Linhas amostradas | Número total de linhas amostradas para cálculos estatísticos. Se Linhas Amostradas < Linhas, os resultados de histograma e densidade exibidos são estimativas com base nas linhas amostradas. |
Passos | Número de passos no histograma. Cada etapa abrange um intervalo de valores de coluna seguido por um valor de coluna de limite superior. As etapas do histograma são definidas na primeira coluna chave das estatísticas. O número máximo de passos é 200. |
Densidade | Calculado como 1 / valores distintos para todos os valores na primeira coluna chave do objeto de estatística, excluindo os valores limite do histograma. Esse valor de Densidade não é usado pelo Otimizador de Consulta e é exibido para compatibilidade com versões anteriores ao SQL Server 2008 (10.0.x). |
Comprimento médio da chave | Número médio de bytes por valor para todas as colunas de chave no objeto de estatística. |
Índice de cadeia de caracteres | Sim indica que o objeto statistics contém estatísticas de resumo de cadeia de caracteres para melhorar as estimativas de cardinalidade para predicados de consulta que usam o operador LIKE; por exemplo, WHERE ProductName LIKE '%Bike' . As estatísticas de resumo de cadeia de caracteres são armazenadas separadamente do histograma e são criadas na primeira coluna de chave do objeto statistics quando é do tipo char, varchar, nchar, nvarchar, varchar(max), nvarchar(max), textoou ntext.. |
Expressão de filtro | Predicado para o subconjunto de linhas da tabela incluídas no objeto statistics.
NULL = estatísticas não filtradas. Para obter mais informações sobre predicados filtrados, consulte Criar índices filtrados. Para obter mais informações sobre estatísticas filtradas, consulte Statistics. |
Linhas não filtradas | Número total de linhas na tabela antes de aplicar a expressão de filtro. Se Filter Expression for NULL , Unfiltered Rows será igual a Rows . |
Percentagem de amostra persistente | Porcentagem de amostra persistente usada para atualizações estatísticas que não especificam explicitamente uma porcentagem de amostragem. Se o valor for zero, nenhuma porcentagem de amostra persistente será definida para essa estatística. Aplica-se a: SQL Server 2016 (13.x) Service Pack 1 4 |
A tabela a seguir descreve as colunas retornadas no conjunto de resultados quando DENSITY_VETOR é especificado.
Nome da coluna | Descrição |
---|---|
Toda a densidade | A densidade é de 1 / valores distintos. Os resultados exibem densidade para cada prefixo de colunas no objeto de estatística, uma linha por densidade. Um valor distinto é uma lista distinta dos valores de coluna por linha e por prefixo de coluna. Por exemplo, se o objeto statistics contiver colunas chave (A, B, C), os resultados relatarão a densidade das listas distintas de valores em cada um desses prefixos de coluna: (A), (A,B) e (A, B, C). Usando o prefixo (A, B, C), cada uma dessas listas é uma lista de valores distinta: (3, 5, 6), (4, 4, 6), (4, 5, 6), (4, 5, 7). Usando o prefixo (A, B), os mesmos valores de coluna têm estas listas de valores distintas: (3, 5), (4, 4) e (4, 5) |
Comprimento Médio | Comprimento médio, em bytes, para armazenar uma lista dos valores de coluna para o prefixo da coluna. Por exemplo, se os valores na lista (3, 5, 6) exigirem 4 bytes, o comprimento será de 12 bytes. |
Colunas | Nomes de colunas no prefixo para as quais Toda a densidade e Comprimento médio são exibidos. |
A tabela a seguir descreve as colunas retornadas no conjunto de resultados quando a opção HISTOGRAMA é especificada.
Nome da coluna | Descrição |
---|---|
RANGE_HI_KEY | Valor da coluna de limite superior para uma etapa de histograma. O valor da coluna também é chamado de valor de chave. |
RANGE_ROWS | Número estimado de linhas cujo valor de coluna está dentro de uma etapa de histograma, excluindo o limite superior. |
EQ_ROWS | Número estimado de linhas cujo valor de coluna é igual ao limite superior da etapa do histograma. |
DISTINCT_RANGE_ROWS | Número estimado de linhas com um valor de coluna distinto dentro de uma etapa de histograma, excluindo o limite superior. |
AVG_RANGE_ROWS | Número médio de linhas com valores de coluna duplicados dentro de uma etapa de histograma, excluindo o limite superior. Quando DISTINCT_RANGE_ROWS é maior que 0, AVG_RANGE_ROWS é calculado dividindo RANGE_ROWS por DISTINCT_RANGE_ROWS. Quando DISTINCT_RANGE_ROWS é 0, AVG_RANGE_ROWS retorna 1 para a etapa de histograma. |
Comentários
A data de atualização das estatísticas é armazenada no objeto de blob de estatísticas juntamente com o de histograma e o vetor de densidade , não nos metadados. Quando nenhum dado é lido para gerar dados estatísticos, o blob de estatísticas não é criado, a data não está disponível e a coluna atualizada é NULL
. Este é o caso de estatísticas filtradas para as quais o predicado não retorna nenhuma linha, ou para novas tabelas vazias.
Histograma
Um histograma mede a frequência de ocorrência para cada valor distinto em um conjunto de dados. O otimizador de consulta calcula um histograma nos valores de coluna na primeira coluna chave do objeto de estatística, selecionando os valores de coluna por amostragem estatística das linhas ou executando uma verificação completa de todas as linhas na tabela ou exibição. Se o histograma for criado a partir de um conjunto amostrado de linhas, os totais armazenados para número de linhas e número de valores distintos são estimativas e não precisam ser inteiros.
Para criar o histograma, o otimizador de consulta classifica os valores de coluna, calcula o número de valores que correspondem a cada valor de coluna distinto e, em seguida, agrega os valores de coluna em um máximo de 200 etapas de histograma contíguas. Cada etapa inclui um intervalo de valores de coluna seguido por um valor de coluna de limite superior. O intervalo inclui todos os valores de coluna possíveis entre valores de fronteira, excluindo os próprios valores de limite. O menor dos valores de coluna classificada é o valor de limite superior para a primeira etapa do histograma.
O diagrama a seguir mostra um histograma com seis etapas. A área à esquerda do primeiro valor de limite superior é o primeiro passo.
Para cada etapa do histograma:
- A linha negrito representa o valor limite superior (RANGE_HI_KEY) e o número de vezes que ocorre (EQ_ROWS)
- A área sólida à esquerda de RANGE_HI_KEY representa o intervalo de valores de coluna e o número médio de vezes que cada valor de coluna ocorre (AVG_RANGE_ROWS). O AVG_RANGE_ROWS para a primeira etapa do histograma é sempre 0.
- As linhas pontilhadas representam os valores amostrados usados para estimar o número total de valores distintos no intervalo (DISTINCT_RANGE_ROWS) e o número total de valores no intervalo (RANGE_ROWS). O otimizador de consulta usa RANGE_ROWS e DISTINCT_RANGE_ROWS para calcular AVG_RANGE_ROWS e não armazena os valores amostrados.
O otimizador de consulta define as etapas do histograma de acordo com sua significância estatística. Ele usa um algoritmo de diferença máxima para minimizar o número de etapas no histograma enquanto maximiza a diferença entre os valores de limite. O número máximo de passos é 200. O número de etapas do histograma pode ser menor do que o número de valores distintos, mesmo para colunas com menos de 200 pontos de limite. Por exemplo, uma coluna com 100 valores distintos pode ter um histograma com menos de 100 pontos de limite.
Vetor de densidade
O otimizador de consulta usa densidades para aprimorar as estimativas de cardinalidade para consultas que retornam várias colunas da mesma tabela ou exibição indexada. O vetor densidade contém uma densidade para cada prefixo de colunas no objeto statistics. Por exemplo, se um objeto de estatística tiver as colunas de chave CustomerId
, ItemId
e Price
, a densidade será calculada em cada um dos seguintes prefixos de coluna.
Prefixo da coluna | Densidade calculada em |
---|---|
(CustomerId) |
Linhas com valores correspondentes para CustomerId |
(CustomerId, ItemId) |
Linhas com valores correspondentes para CustomerId e ItemId |
(CustomerId, ItemId, Price) |
Linhas com valores correspondentes para CustomerId , ItemId e Price |
Limitações
DBCC SHOW_STATISTICS
não fornece estatísticas para índices espaciais nem índices columnstore otimizados para memória.
Permissões para SQL Server e Banco de Dados SQL
Para exibir o objeto de estatísticas, o usuário deve ter a permissão SELECT
na tabela.
Existem os seguintes requisitos para que as permissões SELECT sejam suficientes para executar o comando:
- Os usuários devem ter permissões em todas as colunas no objeto statistics
- Os usuários devem ter permissão em todas as colunas em uma condição de filtro (se existir)
- A tabela não pode ter uma política de segurança em nível de linha.
- Se qualquer uma das colunas dentro de um objeto de estatísticas estiver mascarada com regras de Mascaramento Dinâmico de Dados, além da permissão
SELECT
, o usuário deverá ter a permissãoUNMASK
ou ser membro da função db_ddladmin.
Em versões anteriores ao SQL Server 2012 (11.x) Service Pack 1, o usuário deve ser o proprietário da tabela ou o usuário deve ser membro da função de servidor fixa sysadmin, da função de banco de dados fixa db_owner ou da função de banco de dados fixa db_ddladmin.
Observação
Para alterar o comportamento de volta para o comportamento anterior ao SQL Server 2012 (11.x) Service Pack 1, use o sinalizador de rastreamento 9485.
Permissões para o Azure Synapse Analytics and Analytics Platform System (PDW)
DBCC SHOW_STATISTICS
requer SELECT
permissão na tabela ou associação à função de servidor fixa sysadmin, à função de banco de dados fixa db_owner ou à função de banco de dados fixa db_ddladmin.
Limitações e restrições para o Azure Synapse Analytics and Analytics Platform System (PDW)
DBCC SHOW_STATISTICS
mostra estatísticas armazenadas no banco de dados Shell
no nível do nó Controle. Ele não mostra estatísticas criadas automaticamente pelo SQL Server nos nós de computação.
DBCC SHOW_STATISTICS
não é suportado em tabelas externas.
No Microsoft Fabric, DBCC SHOW_STATISTICS
mostra apenas resultados para estatísticas de histograma, não estatísticas ACE-*.
Exemplos: SQL Server e Banco de Dados SQL do Azure
Um. Retornar todas as informações estatísticas
O exemplo a seguir exibe todas as informações estatísticas para o índice de AK_Address_rowguid
da tabela Person.Address
no banco de dados AdventureWorks2022.
DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid);
GO
B. Especifique a opção HISTOGRAMA
Isso limita as informações estatísticas exibidas para Customer_LastName
aos dados do HISTOGRAMA.
DBCC SHOW_STATISTICS ("dbo.DimCustomer", Customer_LastName) WITH HISTOGRAM;
GO
Exemplos: Azure Synapse Analytics and Analytics Platform System (PDW)
C. Exibir o conteúdo de um objeto de estatística
O exemplo a seguir cria um objeto statistics e, em seguida, exibe o conteúdo das estatísticas de Customer_LastName
na tabela DimCustomer
no banco de dados de exemplo 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
Os resultados mostram o cabeçalho, o vetor de densidade e parte do histograma.
Ver também
- Estatísticas
- estatísticas no Microsoft Fabric
- sys.dm_db_stats_properties (Transact-SQL)
- sys.dm_db_stats_histogram (Transact-SQL)
- sys.dm_db_incremental_stats_properties (Transact-SQL)