ATUALIZAR ESTATÍSTICAS (Transact-SQL)
Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)ponto de extremidade de análise SQL no Microsoft FabricWarehouse no Microsoft Fabricbanco de dados SQL no Microsoft Fabric
Atualiza a otimização de consultas estatísticas em uma tabela ou exibição indexada. Por padrão, o otimizador de consulta já atualiza as estatísticas conforme necessário para melhorar o plano de consulta; Em alguns casos, você pode melhorar o desempenho da consulta usando o UPDATE STATISTICS
ou o procedimento armazenado sp_updatestats atualizar estatísticas com mais frequência do que as atualizações padrão.
A atualização das estatísticas garante que as consultas sejam compiladas com estatísticas de up-todata. A atualização de estatísticas através de qualquer processo pode fazer com que os planos de consulta sejam recompilados automaticamente. Recomendamos não atualizar estatísticas com muita frequência porque há uma compensação de desempenho entre melhorar os planos de consulta e o tempo necessário para recompilar consultas. As compensações específicas dependem da sua aplicação.
UPDATE STATISTICS
pode usar tempdb
para classificar a amostra de linhas para criar estatísticas.
Observação
Para obter mais informações sobre estatísticas no Microsoft Fabric, consulte Statistics in Microsoft Fabric.
Transact-SQL convenções de sintaxe
Sintaxe
-- Syntax for SQL Server and Azure SQL Database
UPDATE STATISTICS table_or_indexed_view_name
[
{
{ index_or_statistics__name }
| ( { index_or_statistics_name } [ ,...n ] )
}
]
[ WITH
[
FULLSCAN
[ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]
| SAMPLE number { PERCENT | ROWS }
[ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]
| RESAMPLE
[ ON PARTITIONS ( { <partition_number> | <range> } [, ...n] ) ]
| <update_stats_stream_option> [ ,...n ]
]
[ [ , ] [ ALL | COLUMNS | INDEX ]
[ [ , ] NORECOMPUTE ]
[ [ , ] INCREMENTAL = { ON | OFF } ]
[ [ , ] MAXDOP = max_degree_of_parallelism ]
[ [ , ] AUTO_DROP = { ON | OFF } ]
] ;
<update_stats_stream_option> ::=
[ STATS_STREAM = stats_stream ]
[ ROWCOUNT = numeric_constant ]
[ PAGECOUNT = numeric_constant ]
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse
UPDATE STATISTICS [ schema_name . ] table_name
[ ( { statistics_name | index_name } ) ]
[ WITH
{
FULLSCAN
| SAMPLE number PERCENT
| RESAMPLE
}
]
[;]
-- Syntax for Microsoft Fabric
UPDATE STATISTICS [ schema_name . ] table_name
[ ( { statistics_name } ) ]
[ WITH
{
FULLSCAN
| SAMPLE number PERCENT
}
]
[;]
Observação
Essa sintaxe não é suportada pelo pool SQL sem servidor no Azure Synapse Analytics.
Argumentos
table_or_indexed_view_name
É o nome da tabela ou modo de exibição indexado que contém o objeto statistics.
index_or_statistics_name ou statistics_name | index_name ou statistics_name
É o nome do índice a ser atualizado ou o nome das estatísticas a serem atualizadas. Se index_or_statistics_name ou statistics_name não for especificado, o otimizador de consulta atualizará todas as estatísticas da tabela ou exibição indexada. Isso inclui estatísticas criadas usando a instrução CREATE STATISTICS, estatísticas de coluna única criadas quando AUTO_CREATE_STATISTICS está ativado e estatísticas criadas para índices.
Para obter mais informações sobre AUTO_CREATE_STATISTICS, consulte ALTER DATABASE SET Options. Para exibir todos os índices de uma tabela ou exibição, você pode usar sp_helpindex.
VARREDURA COMPLETA
Calcule estatísticas verificando todas as linhas na tabela ou no modo de exibição indexado. FULLSCAN e SAMPLE 100 POR CENTO têm os mesmos resultados. FULLSCAN não pode ser usado com a opção SAMPLE.
AMOSTRA número { POR CENTO | LINHAS }
Especifica a porcentagem aproximada ou o número de linhas na tabela ou no modo de exibição indexado para o otimizador de consulta usar quando atualizar estatísticas. Para PERCENT, número pode ser de 0 a 100 e para LINHAS, número pode ser de 0 ao número total de linhas. A porcentagem ou o número real de linhas que os exemplos do otimizador de consulta podem não corresponder à porcentagem ou ao número especificado. Por exemplo, o otimizador de consulta verifica todas as linhas em uma página de dados.
SAMPLE é útil para casos especiais em que o plano de consulta, baseado na amostragem padrão, não é o ideal. Na maioria das situações, não é necessário especificar SAMPLE porque o otimizador de consulta usa amostragem e determina o tamanho da amostra estatisticamente significativo por padrão, conforme necessário para criar planos de consulta de alta qualidade.
Observação
No SQL Server 2016 (13.x) ao usar o nível de compatibilidade de banco de dados 130, a amostragem de dados para criar estatísticas é feita em paralelo para melhorar o desempenho da coleta de estatísticas. O otimizador de consulta usará estatísticas de exemplo paralelas sempre que o tamanho de uma tabela exceder um determinado limite. A partir do SQL Server 2017 (14.x), independentemente do nível de compatibilidade do banco de dados, o comportamento foi alterado novamente para usar uma verificação serial para evitar possíveis problemas de desempenho com esperas excessivas de LATCH. O restante do plano de consulta durante a atualização das estatísticas manterá a execução paralela, se qualificado.
SAMPLE não pode ser usado com a opção FULLSCAN. Quando nem SAMPLE nem FULLSCAN são especificados, o otimizador de consulta usa dados de amostra e calcula o tamanho da amostra por padrão.
Recomendamos não especificar 0 POR CENTO ou 0 LINHAS. Quando 0 PERCENT ou ROWS é especificado, o objeto statistics é atualizado, mas não contém dados estatísticos.
Para a maioria das cargas de trabalho, uma verificação completa não é necessária, e a amostragem padrão é adequada. No entanto, certas cargas de trabalho que são sensíveis a distribuições de dados amplamente variáveis podem exigir um tamanho de amostra maior ou até mesmo uma verificação completa. Embora as estimativas possam se tornar mais precisas com uma varredura completa do que uma varredura amostrada, planos complexos podem não se beneficiar substancialmente.
Para obter mais informações, consulte Componentes e conceitos de estatísticas.
REAMOSTRAGEM
Atualize cada estatística usando sua taxa de amostragem mais recente.
O uso de RESAMPLE pode resultar em uma verificação de tabela completa. Por exemplo, as estatísticas para índices usam uma varredura de tabela completa para sua taxa de amostragem. Quando nenhuma das opções de exemplo (SAMPLE, FULLSCAN, RESAMPLE) é especificada, o otimizador de consulta coleta amostras dos dados e calcula o tamanho da amostra por padrão.
No Warehouse no Microsoft Fabric, não há suporte para RESAMPLE.
PERSIST_SAMPLE_PERCENT = { EM | DESLIGADO }
Aplica-se a: SQL Server 2016 (13.x) Service Pack 1 CU4, SQL Server 2017 (14.x) Service Pack 1 ou SQL Server 2019 (15.x) e versões posteriores, Banco de Dados SQL do Azure, Instância Gerenciada SQL do Azure
Quando ON, as estatísticas manterão a porcentagem de amostragem definida para atualizações subsequentes que não especificam explicitamente uma porcentagem de amostragem. Quando OFF, a porcentagem de amostragem de estatísticas será redefinida para amostragem padrão em atualizações subsequentes que não especificam explicitamente uma porcentagem de amostragem. O padrão é OFF.
DBCC SHOW_STATISTICS e sys.dm_db_stats_properties expõem o valor percentual da amostra persistente para a estatística selecionada.
Se AUTO_UPDATE_STATISTICS for executado, ele usará a porcentagem de amostragem persistente, se disponível, ou usará a porcentagem de amostragem padrão, se não. O comportamento RESAMPLE não é afetado por essa opção.
Se a tabela estiver truncada, todas as estatísticas construídas na pilha truncada ou na árvore B (HoBT) voltarão a usar a porcentagem de amostragem padrão.
Observação
No SQL Server, ao reconstruir um índice que anteriormente tinha estatísticas atualizadas com PERSIST_SAMPLE_PERCENT, a porcentagem de amostra persistente é redefinida de volta ao padrão. A partir do SQL Server 2016 (13.x) SP2 CU17, SQL Server 2017 (14.x) CU26 e SQL Server 2019 (15.x) CU10, a porcentagem de amostra persistente é mantida mesmo durante a reconstrução de um índice.
EM PARTIÇÕES ( { <partition_number> | <intervalo> } [, ... n] ) ]
Aplica-se a: SQL Server 2014 (12.x) e posterior
Força as estatísticas de nível folha que abrangem as partições especificadas na cláusula ON PARTITIONS a serem recalculadas e, em seguida, mescladas para criar as estatísticas globais. WITH RESAMPLE é necessário porque as estatísticas de partição criadas com taxas de amostragem diferentes não podem ser mescladas.
TUDO | COLUNAS | ÍNDICE
Atualize todas as estatísticas existentes, estatísticas criadas em uma ou mais colunas ou estatísticas criadas para índices. Se nenhuma das opções for especificada, a instrução UPDATE STATISTICS atualizará todas as estatísticas na tabela ou no modo de exibição indexado.
NORECOMPUTE
Desative a opção de atualização automática de estatísticas, AUTO_UPDATE_STATISTICS, para as estatísticas especificadas. Se essa opção for especificada, o otimizador de consulta concluirá essa atualização de estatísticas e desativará atualizações futuras.
Para reativar o comportamento da opção AUTO_UPDATE_STATISTICS, execute UPDATE STATISTICS novamente sem a opção NORECOMPUTE ou execute sp_autostats
.
Advertência
O uso dessa opção pode produzir planos de consulta abaixo do ideal. Recomendamos o uso dessa opção com moderação e, em seguida, somente por um administrador de sistema qualificado.
Para obter mais informações sobre a opção AUTO_STATISTICS_UPDATE, consulte ALTER DATABASE SET Options.
INCREMENTAL = { EM | DESLIGADO }
Aplica-se a: SQL Server 2014 (12.x) e posterior
Quando ON, as estatísticas são recriadas de acordo com as estatísticas de partição. Quando OFF, a árvore de estatísticas é descartada e o SQL Server recalcula as estatísticas. O padrão é OFF.
Se as estatísticas por partição não forem suportadas, será gerado um erro. Não há suporte para estatísticas incrementais para os seguintes tipos de estatísticas:
- Estatísticas criadas com índices que não estão alinhados com a tabela base.
- Estatísticas criadas em bases de dados secundárias legíveis Always On.
- Estatísticas criadas em bases de dados só de leitura.
- Estatísticas criadas em índices filtrados.
- Estatísticas criadas em visualizações.
- Estatísticas criadas em tabelas internas.
- Estatísticas criadas com índices espaciais ou índices XML.
MAXDOP = max_degree_of_parallelism
Aplica-se a: SQL Server (a partir do SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3).
Substitui o grau máximo de paralelismo opção de configuração durante a operação estatística. Para obter mais informações, consulte Configurar o grau máximo de paralelismo Opção de configuração do servidor. Use MAXDOP para limitar o número de processadores usados em uma execução de plano paralelo. O máximo é de 64 processadores.
max_degree_of_parallelism pode ser:
1
Suprime a geração de planos paralelos.
>1 Restringe o número máximo de processadores usados em uma operação estatística paralela ao número especificado ou menos com base na carga de trabalho atual do sistema.
0
(padrão)
Usa o número real de processadores ou menos com base na carga de trabalho atual do sistema.
update_stats_stream_option
Identificado apenas para fins informativos. Não suportado. A compatibilidade futura não é garantida.
AUTO_DROP = { EM | DESLIGADO }
Aplica-se a: SQL Server 2022 (16.x) e posterior.
Atualmente, se as estatísticas são criadas por uma ferramenta de terceiros em um banco de dados de clientes, esses objetos de estatísticas podem bloquear ou interferir com as alterações de esquema que o cliente pode desejar.
(Começando com o SQL Server 2022 (16.x)| Este recurso permite a criação de objetos de estatísticas em um modo tal que uma alteração de esquema não ser bloqueada pelas estatísticas, mas em vez disso, as estatísticas serão descartadas. Desta forma, as estatísticas de queda automática comportam-se como estatísticas criadas automaticamente.
Observação
Tentar definir ou desdefinir a propriedade Auto_Drop nas estatísticas criadas automaticamente pode gerar erros - as estatísticas criadas automaticamente sempre usam a queda automática. Alguns backups, quando restaurados, podem ter essa propriedade definida incorretamente até a próxima vez que o objeto statistics for atualizado (manual ou automaticamente). No entanto, as estatísticas criadas automaticamente sempre se comportam como estatísticas de queda automática.
Comentários
Quando ATUALIZAR ESTATÍSTICAS
Para obter mais informações sobre quando usar UPDATE STATISTICS
, consulte Quando atualizar estatísticas.
Limitações
- A atualização de estatísticas não é suportada em tabelas externas. Para atualizar estatísticas em uma tabela externa, solte e recrie as estatísticas.
- A opção
MAXDOP
não é compatível com as opçõesSTATS_STREAM
,ROWCOUNT
ePAGECOUNT
. - A opção
MAXDOP
é limitada pela configuraçãoMAX_DOP
grupo de carga de trabalho do Administrador de Recursos, se usada.
Atualize todas as estatísticas com sp_updatestats
Para obter informações sobre como atualizar estatísticas para todas as tabelas internas e definidas pelo usuário no banco de dados, consulte o procedimento armazenado sp_updatestats. Por exemplo, o comando a seguir chama sp_updatestats
para atualizar todas as estatísticas do banco de dados.
EXEC sp_updatestats;
Gestão automática de índices e estatísticas
Aproveite soluções como Adaptive Index Defrag para gerenciar automaticamente a desfragmentação de índice e atualizações de estatísticas para um ou mais bancos de dados. Este procedimento escolhe automaticamente se pretende reconstruir ou reorganizar um índice de acordo com o seu nível de fragmentação, entre outros parâmetros, e atualizar as estatísticas com um limiar linear.
Determinando a última atualização de estatísticas
Para determinar quando as estatísticas foram atualizadas pela última vez, use a função STATS_DATE.
PDW / Azure Synapse Analytics
A sintaxe a seguir não é suportada pelo Analytics Platform System (PDW) / Azure Synapse Analytics:
UPDATE STATISTICS t1 (a,b);
UPDATE STATISTICS t1 (a) WITH SAMPLE 10 ROWS;
UPDATE STATISTICS t1 (a) WITH NORECOMPUTE;
UPDATE STATISTICS t1 (a) WITH INCREMENTAL = ON;
UPDATE STATISTICS t1 (a) WITH stats_stream = 0x01;
Permissões
Requer ALTER
permissão na tabela ou exibição.
Exemplos
Um. Atualizar todas as estatísticas de uma tabela
O exemplo a seguir atualiza todas as estatísticas na tabela SalesOrderDetail
.
USE AdventureWorks2022;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO
B. Atualizar as estatísticas de um índice
O exemplo a seguir atualiza as estatísticas para o índice de AK_SalesOrderDetail_rowguid
da tabela SalesOrderDetail
.
USE AdventureWorks2022;
GO
UPDATE STATISTICS Sales.SalesOrderDetail AK_SalesOrderDetail_rowguid;
GO
C. Atualizar estatísticas usando 50% de amostragem
O exemplo a seguir cria e atualiza as estatísticas para as colunas Name
e ProductNumber
na tabela Product
.
USE AdventureWorks2022;
GO
CREATE STATISTICS Products
ON Production.Product ([Name], ProductNumber)
WITH SAMPLE 50 PERCENT
-- Time passes. The UPDATE STATISTICS statement is then executed.
UPDATE STATISTICS Production.Product(Products)
WITH SAMPLE 50 PERCENT;
D. Atualizar estatísticas usando FULLSCAN e NORECOMPUTE
O exemplo a seguir atualiza as estatísticas de Products
na tabela Product
, força uma verificação completa de todas as linhas na tabela Product
e desativa as estatísticas automáticas para as estatísticas Products
.
USE AdventureWorks2022;
GO
UPDATE STATISTICS Production.Product(Products)
WITH FULLSCAN, NORECOMPUTE;
GO
Exemplos: Azure Synapse Analytics and Analytics Platform System (PDW)
E. Atualizar estatísticas numa tabela
O exemplo a seguir atualiza as estatísticas de CustomerStats1
na tabela Customer
.
UPDATE STATISTICS Customer (CustomerStats1);
F. Atualizar estatísticas usando uma verificação completa
O exemplo a seguir atualiza as estatísticas de CustomerStats1
, com base na verificação de todas as linhas da tabela Customer
.
UPDATE STATISTICS Customer (CustomerStats1) WITH FULLSCAN;
G. Atualizar todas as estatísticas de uma tabela
O exemplo a seguir atualiza todas as estatísticas na tabela Customer
.
UPDATE STATISTICS Customer;
H. Usando CREATE STATISTICS com AUTO_DROP
Para usar estatísticas de queda automática, basta adicionar o seguinte à cláusula "WITH" de estatísticas criadas ou atualizadas.
UPDATE STATISTICS Customer (CustomerStats1) WITH AUTO_DROP = ON
Conteúdo relacionado
- Estatísticas
- estatísticas no Microsoft Fabric
- BASE DE DADOS ALTER (Transact-SQL)
- sys.dm_db_stats_properties (Transact-SQL)
- sys.dm_db_stats_histogram (Transact-SQL)
- CRIAR ESTATÍSTICAS (Transact-SQL)
- DBCC SHOW_STATISTICS (Transact-SQL)
- ESTATÍSTICAS DE QUEDA (Transact-SQL)
- sp_autostats (Transact-SQL)
- sp_updatestats (Transact-SQL)
- STATS_DATE (Transact-SQL)