Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
O otimizador de consultas utiliza estatísticas sobre colunas para criar planos de consulta que melhoram o desempenho das consultas. As estatísticas são recolhidas das tabelas da base de dados e armazenadas nos metadados da base de dados.
As estatísticas são criadas automaticamente, mas também podem ser criadas manualmente. Por exemplo, as estatísticas são criadas automaticamente para as colunas-chave do índice quando o índice é criado. Para mais informações sobre como criar estatísticas, consulte Estatísticas.
Os dados das tabelas normalmente mudam ao longo do tempo à medida que as linhas são inseridas, atualizadas e eliminadas. Isto significa que as estatísticas precisam de ser atualizadas periodicamente. Por defeito, as estatísticas nas tabelas são atualizadas automaticamente quando o otimizador de consultas determina que podem estar desatualizadas.
Considerações para estatísticas em tabelas otimizadas para memória:
A partir do SQL Server 2016 e da Azure SQL Database, é suportada atualização automática de estatísticas para tabelas otimizadas para memória, quando se utiliza um nível de compatibilidade de base de dados de pelo menos 130. Ver ALTER DATABASE Compatibility Level (Transact-SQL). Se uma base de dados tiver tabelas que foram criadas anteriormente com um nível de compatibilidade inferior, as estatísticas precisam de ser atualizadas manualmente uma vez, para permitir a atualização automática das estatísticas no futuro.
Para procedimentos armazenados compilados nativamente, os planos de execução para consultas no procedimento são otimizados quando o procedimento é compilado, o que acontece no momento da criação. Não são recompilados automaticamente quando as estatísticas são atualizadas. Portanto, as tabelas devem conter um conjunto representativo de dados antes de os procedimentos serem criados.
Procedimentos armazenados compilados nativamente podem ser recompilados manualmente usando sp_recompile (Transact-SQL) e são automaticamente recompilados se a base de dados for retirada do ar e reativada, ou se houver um failover ou reinício do servidor.
Ativação da Atualização Automática de Estatísticas em Tabelas Existentes
Quando são criadas tabelas numa base de dados com nível de compatibilidade de pelo menos 130, a atualização automática das estatísticas é ativada para todas as estatísticas dessa tabela, e não é necessária qualquer ação adicional.
Se uma base de dados tiver tabelas otimizadas para memória que foram criadas numa versão anterior do SQL Server ou com um nível de compatibilidade inferior a 130, as estatísticas precisam de ser atualizadas manualmente uma vez para permitir a atualização automática daqui para a frente.
Para permitir a atualização automática de estatísticas para tabelas otimizadas para memória criadas sob um nível de compatibilidade mais antigo, siga estes passos:
Atualize o nível de compatibilidade da base de dados:
ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL=130Atualize manualmente as estatísticas das tabelas otimizadas para memória. Abaixo está um script de exemplo que faz o mesmo.
Recompilar manualmente os procedimentos armazenados compilados nativamente para beneficiar das estatísticas atualizadas.
Script único para estatística: Para tabelas otimizadas para memória que foram criadas sob um nível de compatibilidade inferior, pode executar o seguinte script de Transact-SQL uma vez para atualizar as estatísticas de todas as tabelas otimizadas para memória, e ativar a atualização automática das estatísticas a partir daí (assumindo que AUTO_UPDATE_STATISTICS esteja ativado para a base de dados):
-- Assuming AUTO_UPDATE_STATISTICS is already ON for your database:
-- ALTER DATABASE CURRENT SET AUTO_UPDATE_STATISTICS ON;
ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 130;
GO
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT
@sql += N'UPDATE STATISTICS '
+ quotename(schema_name(t.schema_id))
+ N'.'
+ quotename(t.name)
+ ';' + CHAR(13) + CHAR(10)
FROM sys.tables AS t
WHERE t.is_memory_optimized = 1 AND
t.object_id IN (SELECT object_id FROM sys.stats WHERE no_recompute=1)
;
EXECUTE sp_executesql @sql;
GO
-- Each row appended to @sql looks roughly like:
-- UPDATE STATISTICS [dbo].[MyMemoryOptimizedTable];
Verifique se a atualização automática está ativada: O script seguinte verifica se a atualização automática está ativada para estatísticas em tabelas otimizadas para memória. Após executar o script anterior, ele retorna 1 na coluna auto-update enabled para todos os objetos de estatística.
SELECT
quotename(schema_name(o.schema_id)) + N'.' + quotename(o.name) AS [table],
s.name AS [statistics object],
1-s.no_recompute AS [auto-update enabled]
FROM sys.stats s JOIN sys.tables o ON s.object_id=o.object_id
WHERE o.is_memory_optimized=1
Diretrizes para a Implementação de Tabelas e Procedimentos
Para garantir que o otimizador de consultas tem estatísticas atualizadas ao criar planos de consulta, implemente tabelas otimizadas em memória e procedimentos armazenados compilados nativamente que acedam a estas tabelas usando estas quatro etapas:
Garantir que a base de dados tem um nível de compatibilidade de pelo menos 130. Ver Nível de Compatibilidade ALTER DATABASE (Transact-SQL).
Crie tabelas e índices. Os índices devem ser especificados em linha nas instruções CREATE TABLE .
Carregue os dados nas tabelas.
Crie procedimentos armazenados que acedam às tabelas.
Criar procedimentos armazenados compilados nativamente após carregar os dados garante que o otimizador tem estatísticas disponíveis para as tabelas otimizadas para memória. Isto garantirá planos de consulta eficientes quando o procedimento for compilado.