Criar e atualizar estatísticas de tabela no pool SQL dedicado
Este artigo fornece recomendações e exemplos para criar e atualizar estatísticas de otimização de consulta em tabelas no pool SQL dedicado.
Porquê utilizar estatísticas
Quanto mais dedicado o pool SQL souber sobre seus dados, mais rápido ele poderá executar consultas em relação a eles. Depois de carregar dados no pool SQL dedicado, coletar estatísticas sobre seus dados é uma das coisas mais importantes que você pode fazer para otimizar suas consultas.
O otimizador de consulta de pool SQL dedicado é um otimizador baseado em custo. Ele compara o custo de vários planos de consulta e, em seguida, escolhe o plano com o menor custo. Na maioria dos casos, escolhe o plano que executa mais rápido.
Por exemplo, o otimizador seleciona um determinado plano se estimar que a data filtrada pela consulta retorna uma linha. Se o otimizador estimar que a data selecionada retorna um milhão de linhas, ele escolhe um plano diferente.
Criação automática de estatísticas
Quando a opção de banco de dados AUTO_CREATE_STATISTICS
está ativada, o pool SQL dedicado analisa as consultas de usuário de entrada em busca de estatísticas ausentes.
Se as estatísticas estiverem ausentes, o otimizador de consulta criará estatísticas em colunas individuais no predicado de consulta ou na condição de junção para melhorar as estimativas de cardinalidade para o plano de consulta.
Nota
A criação automática de estatísticas está atualmente ativada por padrão.
Você pode verificar se seu pool SQL dedicado foi AUTO_CREATE_STATISTICS
configurado executando o seguinte comando T-SQL:
SELECT name, is_auto_create_stats_on
FROM sys.databases
Se o pool SQL dedicado não tiver AUTO_CREATE_STATISTICS
configurado, recomendamos que você habilite essa propriedade executando o seguinte comando. Substitua <your-datawarehouse-name>
pelo nome do pool SQL dedicado.
ALTER DATABASE <your-datawarehouse-name>
SET AUTO_CREATE_STATISTICS ON
Estas declarações desencadeiam a criação automática de estatísticas:
SELECT
-
INSERT
...SELECT
-
CREATE TABLE AS SELECT
(CTAS) UPDATE
DELETE
-
EXPLAIN
quando contém uma junção ou a presença de um predicado é detetada
Nota
A criação automática de estatísticas não é realizada em tabelas temporárias ou externas.
A criação automática de estatísticas é feita de forma síncrona, de modo que você pode incorrer em um desempenho de consulta ligeiramente degradado se suas colunas estiverem faltando estatísticas. O tempo para criar estatísticas para uma única coluna depende do tamanho da tabela.
Para evitar a degradação mensurável do desempenho, você deve garantir que as estatísticas tenham sido criadas primeiro executando a carga de trabalho de referência antes de criar o perfil do sistema.
Nota
A criação de estatísticas é registrada sys.dm_pdw_exec_requests sob um contexto de usuário diferente.
Quando as estatísticas automáticas são criadas, elas assumem a forma: _WA_Sys_<8 digit column id in Hex>_<8 digit table id in Hex>
. Você pode visualizar estatísticas que já foram criadas executando o comando DBCC SHOW_STATISTICS :
DBCC SHOW_STATISTICS (<table_name>, <target>)
O table_name
é o nome da tabela que contém as estatísticas a serem exibidas. Esta tabela não pode ser uma tabela externa. O destino é o nome do índice de destino, estatísticas ou coluna para o qual exibir informações estatísticas.
Atualização de estatísticas
Uma prática recomendada é atualizar as estatísticas nas colunas de data todos os dias à medida que novas datas são adicionadas. Cada vez que novas linhas são carregadas no pool SQL dedicado, novas datas de carregamento ou datas de transação são adicionadas. Estes aditamentos alteram a distribuição dos dados e tornam as estatísticas desatualizadas.
As estatísticas de uma coluna de país/região em uma tabela de clientes podem nunca precisar ser atualizadas, pois a distribuição de valores geralmente não muda. Supondo que a distribuição seja constante entre os clientes, adicionar novas linhas à variação da tabela não alterará a distribuição de dados.
No entanto, se o pool SQL dedicado contiver apenas um país/região e você trouxer dados de um novo país/região, resultando em dados de vários países/regiões sendo armazenados, será necessário atualizar as estatísticas na coluna país/região.
Seguem-se recomendações para a atualização das estatísticas:
Atributo Estatística | Recomendação |
---|---|
Frequência das atualizações de estatísticas | Conservador: Diariamente após carregar ou transformar seus dados |
Amostragem | Menos de 1 bilhão de linhas, use amostragem padrão (20%).
Com mais de 1 bilhão de linhas, use amostragem de dois por cento. |
Uma das primeiras perguntas a fazer quando você está solucionando uma consulta é "As estatísticas estão atualizadas?"
Esta pergunta não pode ser respondida pela idade dos dados. Um objeto de estatísticas atualizado pode ser antigo se não houver nenhuma alteração material nos dados subjacentes. Quando o número de linhas mudou substancialmente, ou há uma mudança material na distribuição de valores para uma coluna, então é hora de atualizar as estatísticas.
Não há uma exibição de gerenciamento dinâmico para determinar se os dados na tabela foram alterados desde a última vez que as estatísticas foram atualizadas. As duas consultas a seguir podem ajudá-lo a determinar se suas estatísticas estão obsoletas.
Consulta 1: Encontre a diferença entre a contagem de linhas das estatísticas (
stats_row_count
) e a contagem de linhas real (actual_row_count
).select objIdsWithStats.[object_id], actualRowCounts.[schema], actualRowCounts.logical_table_name, statsRowCounts.stats_row_count, actualRowCounts.actual_row_count, row_count_difference = CASE WHEN actualRowCounts.actual_row_count >= statsRowCounts.stats_row_count THEN actualRowCounts.actual_row_count - statsRowCounts.stats_row_count ELSE statsRowCounts.stats_row_count - actualRowCounts.actual_row_count END, percent_deviation_from_actual = CASE WHEN actualRowCounts.actual_row_count = 0 THEN statsRowCounts.stats_row_count WHEN statsRowCounts.stats_row_count = 0 THEN actualRowCounts.actual_row_count WHEN actualRowCounts.actual_row_count >= statsRowCounts.stats_row_count THEN CONVERT(NUMERIC(18, 0), CONVERT(NUMERIC(18, 2), (actualRowCounts.actual_row_count - statsRowCounts.stats_row_count)) / CONVERT(NUMERIC(18, 2), actualRowCounts.actual_row_count) * 100) ELSE CONVERT(NUMERIC(18, 0), CONVERT(NUMERIC(18, 2), (statsRowCounts.stats_row_count - actualRowCounts.actual_row_count)) / CONVERT(NUMERIC(18, 2), actualRowCounts.actual_row_count) * 100) END from ( select distinct object_id from sys.stats where stats_id > 1 ) objIdsWithStats left join ( select object_id, sum(rows) as stats_row_count from sys.partitions group by object_id ) statsRowCounts on objIdsWithStats.object_id = statsRowCounts.object_id left join ( SELECT sm.name [schema] , tb.name logical_table_name , tb.object_id object_id , SUM(rg.row_count) actual_row_count FROM sys.schemas sm INNER JOIN sys.tables tb ON sm.schema_id = tb.schema_id INNER JOIN sys.pdw_table_mappings mp ON tb.object_id = mp.object_id INNER JOIN sys.pdw_nodes_tables nt ON nt.name = mp.physical_name INNER JOIN sys.dm_pdw_nodes_db_partition_stats rg ON rg.object_id = nt.object_id AND rg.pdw_node_id = nt.pdw_node_id AND rg.distribution_id = nt.distribution_id WHERE rg.index_id = 1 GROUP BY sm.name, tb.name, tb.object_id ) actualRowCounts on objIdsWithStats.object_id = actualRowCounts.object_id
Consulta 2: Encontre a idade das suas estatísticas verificando a última vez que as suas estatísticas foram atualizadas em cada tabela.
Nota
Se houver uma alteração material na distribuição de valores para uma coluna, você deve atualizar as estatísticas independentemente da última vez que elas foram atualizadas.
SELECT sm.[name] AS [schema_name], tb.[name] AS [table_name], co.[name] AS [stats_column_name], st.[name] AS [stats_name], STATS_DATE(st.[object_id],st.[stats_id]) AS [stats_last_updated_date] FROM sys.objects ob JOIN sys.stats st ON ob.[object_id] = st.[object_id] JOIN sys.stats_columns sc ON st.[stats_id] = sc.[stats_id] AND st.[object_id] = sc.[object_id] JOIN sys.columns co ON sc.[column_id] = co.[column_id] AND sc.[object_id] = co.[object_id] JOIN sys.types ty ON co.[user_type_id] = ty.[user_type_id] JOIN sys.tables tb ON co.[object_id] = tb.[object_id] JOIN sys.schemas sm ON tb.[schema_id] = sm.[schema_id] WHERE st.[user_created] = 1;
As colunas de data em um pool SQL dedicado, por exemplo, geralmente precisam de atualizações estatísticas frequentes. Cada vez que novas linhas são carregadas no pool SQL dedicado, novas datas de carregamento ou datas de transação são adicionadas. Estes aditamentos alteram a distribuição dos dados e tornam as estatísticas desatualizadas.
Por outro lado, as estatísticas de uma coluna de gênero em uma tabela de clientes podem nunca precisar ser atualizadas. Supondo que a distribuição seja constante entre os clientes, adicionar novas linhas à variação da tabela não alterará a distribuição de dados.
Se o pool SQL dedicado contiver apenas um gênero e um novo requisito resultar em vários gêneros, será necessário atualizar as estatísticas na coluna gênero.
Para obter mais informações, consulte as orientações gerais para Estatísticas.
Implementar a gestão de estatísticas
Muitas vezes, é uma boa ideia estender seu processo de carregamento de dados para garantir que as estatísticas sejam atualizadas no final da carga para evitar ou minimizar o bloqueio ou a contenção de recursos entre consultas simultâneas.
A carga de dados é quando as tabelas mais frequentemente alteram seu tamanho ou sua distribuição de valores. O carregamento de dados é um local lógico para implementar alguns processos de gestão.
Os seguintes princípios orientadores são fornecidos para atualizar suas estatísticas:
- Certifique-se de que cada tabela carregada tem, pelo menos, um objeto de estatísticas atualizado. Isso atualiza as informações de tamanho da tabela (contagem de linhas e contagem de páginas) como parte da atualização de estatísticas.
- Concentre-se nas colunas que participam das cláusulas JOIN, GROUP BY, ORDER BY e DISTINCT.
- Considere atualizar colunas de chave ascendente, como datas de transação, com mais frequência, porque esses valores não são incluídos no histograma de estatísticas.
- Considere atualizar as colunas de distribuição estática com menos frequência.
- Lembre-se de cada objeto estatístico é atualizado em sequência. A simples implementação
UPDATE STATISTICS <TABLE_NAME>
nem sempre é ideal, especialmente para tabelas amplas com muitos objetos estatísticos.
Para obter mais informações, consulte Estimativa de cardinalidade.
Exemplos: Criar estatísticas
Estes exemplos mostram como usar várias opções para criar estatísticas. As opções que você usa para cada coluna dependem das características dos seus dados e de como a coluna é usada nas consultas.
Crie estatísticas de coluna única com opções padrão
Para criar estatísticas em uma coluna, forneça um nome para o objeto statistics e o nome da coluna.
Essa sintaxe usa todas as opções padrão. Por padrão, 20% da tabela é amostrada ao criar estatísticas.
CREATE STATISTICS [statistics_name] ON [schema_name].[table_name]([column_name]);
Por exemplo:
CREATE STATISTICS col1_stats ON dbo.table1 (col1);
Crie estatísticas de coluna única examinando cada linha
A taxa de amostragem padrão de 20% é suficiente para a maioria das situações. No entanto, é possível ajustar a taxa de amostragem.
Para obter um exemplo da tabela completa, use esta sintaxe:
CREATE STATISTICS [statistics_name] ON [schema_name].[table_name]([column_name]) WITH FULLSCAN;
Por exemplo:
CREATE STATISTICS col1_stats ON dbo.table1 (col1) WITH FULLSCAN;
Crie estatísticas de coluna única especificando o tamanho da amostra
Como alternativa, você pode especificar o tamanho da amostra como uma porcentagem:
CREATE STATISTICS col1_stats ON dbo.table1 (col1) WITH SAMPLE = 50 PERCENT;
Criar estatísticas de coluna única em apenas algumas das linhas
Você também pode criar estatísticas sobre uma parte das linhas da tabela. Isso é chamado de estatística filtrada.
Por exemplo, você pode usar estatísticas filtradas quando planeja consultar uma partição específica de uma tabela particionada grande. Ao criar estatísticas apenas sobre os valores de partição, a precisão das estatísticas melhora, o que melhora o desempenho da consulta.
Este exemplo cria estatísticas sobre um intervalo de valores. Os valores podem ser facilmente definidos para corresponder ao intervalo de valores em uma partição.
CREATE STATISTICS stats_col1 ON table1(col1) WHERE col1 > '2000101' AND col1 < '20001231';
Nota
Para que o otimizador de consulta considere o uso de estatísticas filtradas ao escolher o plano de consulta distribuído, a consulta deve caber dentro da definição do objeto de estatísticas. Usando o exemplo anterior, a cláusula WHERE da consulta precisa especificar valores col1 entre 2000101 e 20001231.
Crie estatísticas de coluna única com todas as opções
Você também pode combinar as opções. O exemplo a seguir cria um objeto de estatísticas filtrado com um tamanho de amostra personalizado:
CREATE STATISTICS stats_col1 ON table1 (col1) WHERE col1 > '2000101' AND col1 < '20001231' WITH SAMPLE = 50 PERCENT;
Para obter a referência completa, consulte CREATE STATISTICS.
Criar estatísticas com várias colunas
Para criar um objeto de estatísticas com várias colunas, use os exemplos anteriores, mas especifique mais colunas.
Nota
O histograma, que é usado para estimar o número de linhas no resultado da consulta, só está disponível para a primeira coluna listada na definição do objeto de estatística.
Neste exemplo, o histograma está em product_category
. As estatísticas entre colunas são calculadas em product_category
e product_sub_category
:
CREATE STATISTICS stats_2cols ON table1 (product_category, product_sub_category) WHERE product_category > '2000101' AND product_category < '20001231' WITH SAMPLE = 50 PERCENT;
Como há uma correlação entre product_category
e product_sub_category
, um objeto de estatísticas com várias colunas pode ser útil se essas colunas forem acessadas ao mesmo tempo.
Criar estatísticas em todas as colunas de uma tabela
Uma maneira de criar estatísticas é emitir CREATE STATISTICS
comandos depois de criar a tabela:
CREATE TABLE dbo.table1
(
col1 int
, col2 int
, col3 int
)
WITH
(
CLUSTERED COLUMNSTORE INDEX
)
;
CREATE STATISTICS stats_col1 on dbo.table1 (col1);
CREATE STATISTICS stats_col2 on dbo.table2 (col2);
CREATE STATISTICS stats_col3 on dbo.table3 (col3);
Usar um procedimento armazenado para criar estatísticas em todas as colunas em um pool SQL
O pool SQL dedicado não tem um procedimento armazenado do sistema equivalente ao sp_create_stats
do SQL Server. Este procedimento armazenado cria um único objeto de estatísticas de coluna em cada coluna de um pool SQL que ainda não tem estatísticas.
O exemplo a seguir mostra como começar com seu design de pool SQL. Sinta-se à vontade para adaptá-lo às suas necessidades.
CREATE PROCEDURE [dbo].[prc_sqldw_create_stats]
( @create_type tinyint -- 1 default 2 Fullscan 3 Sample
, @sample_pct tinyint
)
AS
IF @create_type IS NULL
BEGIN
SET @create_type = 1;
END;
IF @create_type NOT IN (1,2,3)
BEGIN
THROW 151000,'Invalid value for @stats_type parameter. Valid range 1 (default), 2 (fullscan) or 3 (sample).',1;
END;
IF @sample_pct IS NULL
BEGIN;
SET @sample_pct = 20;
END;
IF OBJECT_ID('tempdb..#stats_ddl') IS NOT NULL
BEGIN;
DROP TABLE #stats_ddl;
END;
CREATE TABLE #stats_ddl
WITH ( DISTRIBUTION = HASH([seq_nmbr])
, LOCATION = USER_DB
)
AS
WITH T
AS
(
SELECT t.[name] AS [table_name]
, s.[name] AS [table_schema_name]
, c.[name] AS [column_name]
, c.[column_id] AS [column_id]
, t.[object_id] AS [object_id]
, ROW_NUMBER()
OVER(ORDER BY (SELECT NULL)) AS [seq_nmbr]
FROM sys.[tables] t
JOIN sys.[schemas] s ON t.[schema_id] = s.[schema_id]
JOIN sys.[columns] c ON t.[object_id] = c.[object_id]
LEFT JOIN sys.[stats_columns] l ON l.[object_id] = c.[object_id]
AND l.[column_id] = c.[column_id]
AND l.[stats_column_id] = 1
LEFT JOIN sys.[external_tables] e ON e.[object_id] = t.[object_id]
WHERE l.[object_id] IS NULL
AND e.[object_id] IS NULL -- not an external table
)
SELECT [table_schema_name]
, [table_name]
, [column_name]
, [column_id]
, [object_id]
, [seq_nmbr]
, CASE @create_type
WHEN 1
THEN CAST('CREATE STATISTICS '+QUOTENAME('stat_'+table_schema_name+ '_' + table_name + '_'+column_name)+' ON '+QUOTENAME(table_schema_name)+'.'+QUOTENAME(table_name)+'('+QUOTENAME(column_name)+')' AS VARCHAR(8000))
WHEN 2
THEN CAST('CREATE STATISTICS '+QUOTENAME('stat_'+table_schema_name+ '_' + table_name + '_'+column_name)+' ON '+QUOTENAME(table_schema_name)+'.'+QUOTENAME(table_name)+'('+QUOTENAME(column_name)+') WITH FULLSCAN' AS VARCHAR(8000))
WHEN 3
THEN CAST('CREATE STATISTICS '+QUOTENAME('stat_'+table_schema_name+ '_' + table_name + '_'+column_name)+' ON '+QUOTENAME(table_schema_name)+'.'+QUOTENAME(table_name)+'('+QUOTENAME(column_name)+') WITH SAMPLE '+CONVERT(varchar(4),@sample_pct)+' PERCENT' AS VARCHAR(8000))
END AS create_stat_ddl
FROM T
;
DECLARE @i INT = 1
, @t INT = (SELECT COUNT(*) FROM #stats_ddl)
, @s NVARCHAR(4000) = N''
;
WHILE @i <= @t
BEGIN
SET @s=(SELECT create_stat_ddl FROM #stats_ddl WHERE seq_nmbr = @i);
PRINT @s
EXEC sp_executesql @s
SET @i+=1;
END
DROP TABLE #stats_ddl;
Para criar estatísticas em todas as colunas da tabela usando os padrões, execute o procedimento armazenado.
EXEC [dbo].[prc_sqldw_create_stats] 1, NULL;
Para criar estatísticas em todas as colunas da tabela usando uma verificação completa, chame este procedimento.
EXEC [dbo].[prc_sqldw_create_stats] 2, NULL;
Para criar estatísticas de amostra em todas as colunas da tabela, insira 3 e a porcentagem da amostra. Este procedimento usa uma taxa de amostragem de 20 %.
EXEC [dbo].[prc_sqldw_create_stats] 3, 20;
Exemplos: Atualizar estatísticas
Para atualizar as estatísticas, você pode:
- Atualize um objeto de estatística. Especifique o nome do objeto de estatísticas que você deseja atualizar.
- Atualize todos os objetos de estatísticas em uma tabela. Especifique o nome da tabela em vez de um objeto de estatística específico.
Atualizar um objeto de estatística específico
Use a sintaxe a seguir para atualizar um objeto de estatística específico:
UPDATE STATISTICS [schema_name].[table_name]([stat_name]);
Por exemplo:
UPDATE STATISTICS [dbo].[table1] ([stats_col1]);
Ao atualizar objetos de estatísticas específicos, você pode minimizar o tempo e os recursos necessários para gerenciar estatísticas. Fazer isso requer alguma reflexão para escolher os melhores objetos de estatísticas para atualizar.
Atualizar todas as estatísticas de uma tabela
Um método simples para atualizar todos os objetos de estatísticas em uma tabela é:
UPDATE STATISTICS [schema_name].[table_name];
Por exemplo:
UPDATE STATISTICS dbo.table1;
A UPDATE STATISTICS
declaração é fácil de usar. Apenas lembre-se que ele atualiza todas as estatísticas na tabela e, portanto, pode executar mais trabalho do que o necessário. Se o desempenho não for um problema, esta é a maneira mais fácil e completa de garantir que as estatísticas estejam atualizadas.
Nota
Quando você atualiza todas as estatísticas em uma tabela, o pool SQL dedicado faz uma verificação para obter uma amostra da tabela para cada objeto de estatística. Se a tabela for grande e tiver muitas colunas e muitas estatísticas, pode ser mais eficiente atualizar estatísticas individuais com base na necessidade.
Para uma implementação de um UPDATE STATISTICS
procedimento, consulte Tabelas temporárias. O método de implementação é ligeiramente diferente do procedimento anterior CREATE STATISTICS
, mas o resultado é o mesmo.
Para obter a sintaxe completa, consulte Atualizar estatísticas.
Metadados estatísticos
Existem várias visualizações do sistema e funções que você pode usar para encontrar informações sobre estatísticas. Por exemplo, você pode ver se um objeto de estatísticas pode estar desatualizado usando a função stats-date para ver quando as estatísticas foram criadas ou atualizadas pela última vez.
Visualizações de catálogo para estatísticas
Estas visualizações do sistema fornecem informações sobre estatísticas:
Visualização do catálogo | Description |
---|---|
sys.columns | Uma linha para cada coluna |
sys.objects | Uma linha para cada objeto no banco de dados |
sys.schemas | Uma linha para cada esquema no banco de dados |
sys.stats | Uma linha para cada objeto de estatística |
sys.stats_columns | Uma linha para cada coluna no objeto de estatística; links de volta para sys.columns |
sys.tables | Uma linha para cada tabela (inclui tabelas externas) |
sys.table_types | Uma linha para cada tipo de dados |
Funções do sistema para estatísticas
Estas funções do sistema são úteis para trabalhar com estatísticas:
Função do sistema | Description |
---|---|
STATS_DATE | Data da última atualização do objeto de estatísticas |
DBCC SHOW_STATISTICS | Nível de resumo e informações detalhadas sobre a distribuição de valores conforme entendido pelo objeto de estatística |
Combine estatísticas, colunas e funções em uma única exibição
Esta vista reúne colunas relacionadas com estatísticas e resultados da STATS_DATE()
função.
CREATE VIEW dbo.vstats_columns
AS
SELECT
sm.[name] AS [schema_name]
, tb.[name] AS [table_name]
, st.[name] AS [stats_name]
, st.[filter_definition] AS [stats_filter_definition]
, st.[has_filter] AS [stats_is_filtered]
, STATS_DATE(st.[object_id],st.[stats_id])
AS [stats_last_updated_date]
, co.[name] AS [stats_column_name]
, ty.[name] AS [column_type]
, co.[max_length] AS [column_max_length]
, co.[precision] AS [column_precision]
, co.[scale] AS [column_scale]
, co.[is_nullable] AS [column_is_nullable]
, co.[collation_name] AS [column_collation_name]
, QUOTENAME(sm.[name])+'.'+QUOTENAME(tb.[name])
AS two_part_name
, QUOTENAME(DB_NAME())+'.'+QUOTENAME(sm.[name])+'.'+QUOTENAME(tb.[name])
AS three_part_name
FROM sys.objects AS ob
JOIN sys.stats AS st ON ob.[object_id] = st.[object_id]
JOIN sys.stats_columns AS sc ON st.[stats_id] = sc.[stats_id]
AND st.[object_id] = sc.[object_id]
JOIN sys.columns AS co ON sc.[column_id] = co.[column_id]
AND sc.[object_id] = co.[object_id]
JOIN sys.types AS ty ON co.[user_type_id] = ty.[user_type_id]
JOIN sys.tables AS tb ON co.[object_id] = tb.[object_id]
JOIN sys.schemas AS sm ON tb.[schema_id] = sm.[schema_id]
WHERE 1=1
AND st.[user_created] = 1
;
Exemplos de DBCC SHOW_STATISTICS()
DBCC SHOW_STATISTICS()
Mostra os dados mantidos dentro de um objeto Statistics. Estes dados dividem-se em três partes:
- Cabeçalho
- Vetor de densidade
- Histograma
Os metadados do cabeçalho sobre as estatísticas. O histograma exibe a distribuição de valores na primeira coluna de chave do objeto de estatística. O vetor de densidade mede a correlação entre colunas.
Nota
O pool SQL dedicado calcula estimativas de cardinalidade com qualquer um dos dados no objeto de estatística.
Mostrar cabeçalho, densidade e histograma
Este exemplo simples mostra todas as três partes de um objeto statistics:
DBCC SHOW_STATISTICS([<schema_name>.<table_name>],<stats_name>)
Por exemplo:
DBCC SHOW_STATISTICS (dbo.table1, stats_col1);
Mostrar uma ou mais partes do DBCC SHOW_STATISTICS()
Se você estiver interessado apenas em visualizar partes específicas, use a WITH
cláusula e especifique quais partes deseja ver:
DBCC SHOW_STATISTICS([<schema_name>.<table_name>],<stats_name>) WITH stat_header, histogram, density_vector
Por exemplo:
DBCC SHOW_STATISTICS (dbo.table1, stats_col1) WITH histogram, density_vector
DBCC SHOW_STATISTICS() diferenças
DBCC SHOW_STATISTICS()
é implementado de forma mais rigorosa no pool SQL dedicado em comparação com o SQL Server:
- Recursos não documentados não são suportados.
- Não é possível usar
Stats_stream
o . - Não é possível juntar resultados para subconjuntos específicos de dados estatísticos. Por exemplo,
STAT_HEADER JOIN DENSITY_VECTOR
. -
NO_INFOMSGS
não pode ser definido para supressão de mensagens. - Os colchetes em torno dos nomes das estatísticas não podem ser usados.
- Não é possível usar nomes de coluna para identificar objetos de estatística.
- O erro personalizado 2767 não é suportado.
Conteúdos relacionados
Monitore sua carga de trabalho dedicada do pool SQL do Azure Synapse Analytics usando DMVs