Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Atualizar estatísticas do SQL Server usando um plano de manutenção de banco de dados


Backups de banco de dados, verificações de integridade e otimizações de desempenho são as principais tarefas regulares dos DBAs. Os dados do cliente são muito importantes para um DBA gerenciar o backup do banco de dados e garantir a integridade dos backups. Portanto, se algo der errado com um banco de dados de produção, ele poderá ser recuperado com o mínimo de tempo de inatividade. As verificações de integridade do banco de dados também são importantes porque, no caso de corrupção do banco de dados, isso pode ser corrigido com o mínimo de tempo de inatividade e perda de dados. Gerenciar o desempenho do banco de dados também é importante. Gerenciar o desempenho do banco de dados é uma combinação de várias tarefas.
  1. Identifique a lista de consultas com uso intensivo de recursos e ajude os desenvolvedores a reescrevê-las.
  2. Crie e gerencie índices na tabela. Além disso, execute a desfragmentação do índice para garantir que eles permaneçam em boas condições.
  3. Finalmente, gerenciamento de estatísticas de tabelas.

Em meu artigo anterior, abordei o tópico Criação automática de estatísticas e Estatísticas de atualização automática e como elas podem ajudar a melhorar o desempenho. Neste artigo, vou explicar como criar e agendar o plano de manutenção para atualizar as estatísticas.

Primeiro, deixe-me explicar o que são as estatísticas do SQL Server e como elas podem ajudar a aumentar o desempenho do SQL Server.

Estatísticas do SQL Server e sua importância


As estatísticas são metadados usados ​​pelo otimizador de consultas do SQL Server, que ajudam a determinar a melhor maneira de recuperar os dados. O otimizador usa estatísticas para entender os dados, sua distribuição e o número de linhas que uma determinada consulta provavelmente retornará das estatísticas disponíveis. Com base nessas informações, ele decide o caminho ideal de acesso aos dados. Ele também determina se deve fazer uma varredura de tabela ou uma busca de índice, usar a junção de loop aninhado ou uma junção de hash, etc.

Se as estatísticas estiverem desatualizadas ou indisponíveis, o otimizador pode escolher o plano de execução ruim, o que reduz significativamente o desempenho da consulta. O SQL Server pode manter estatísticas automaticamente e atualizá-las com base em seu rastreamento de modificações de dados.

As estatísticas podem ser criadas e atualizadas automaticamente ativando “Auto Create Statistics” e “Auto Update Statistics”. No entanto, para algumas tabelas, como aquelas sujeitas a alterações significativas na distribuição de dados, é possível que a atualização automática de estatísticas do SQL Server seja insuficiente para manter consistentemente altos níveis de desempenho de consulta.

Antes de explicar as diferentes abordagens para atualizar as estatísticas, deixe-me explicar as diferentes maneiras de revisar as estatísticas criadas em qualquer tabela.

Como revisar as estatísticas


Podemos visualizar estatísticas de coluna e estatísticas de índice
  1. Usando o SQL Server Management Studio.
  2. Usando procedimentos armazenados do sistema e catálogos do sistema e exibições de gerenciamento dinâmico

Visualizar estatísticas usando o SQL Server Management Studio


Por exemplo, quero ver as estatísticas criadas no [HumanResources].[Employee] tabela criada no AdventureWorks2017 base de dados. Para fazer isso, inicie o SQL Server Management Studio. Em seguida, expanda o AdventureWorks2017 banco de dados, expanda o [HumanResources].[Employee] tabela. Veja a seguinte imagem:


Usando procedimentos armazenados do sistema e exibições de gerenciamento dinâmico


Se você estiver usando uma versão mais antiga do SQL Server, poderá usar o sp_helpstats procedimento do sistema para revisar as estatísticas das tabelas. sp_helpstats mostrará as estatísticas, criadas pelo SQL Server ou por um usuário. Ele não mostrará as estatísticas criadas pelo Index. Para demonstrar isso, criei uma estatística chamada User_Statistics_BirthDate em [Recursos Humanos].[Funcionário] tabela.

Segue o exemplo:
USE ADVENTUREWORKS2017 
GO
EXEC SP_HELPSTATS 
  'HUMANRESOURCES.EMPLOYEE'

Segue a saída.



Você pode revisar as estatísticas consultando o sys.stats catálogo do sistema. Ele fornece informações sobre as estatísticas criadas pelo SQL Server, criadas por índices e criadas por um usuário.

Execute a seguinte consulta:
SELECT NAME         AS 'STATISTICS NAME', 
       AUTO_CREATED AS 'CREATED AUTOMATICALLY', 
       USER_CREATED AS 'CREATED BY USER' 
FROM   SYS.STATS 
WHERE  OBJECT_ID = OBJECT_ID('HUMANRESOURCES.EMPLOYEE')

Segue a saída:



Agora, vamos juntar esta tabela com outros catálogos do sistema para obter informações detalhadas sobre as estatísticas. Para isso, execute a seguinte consulta:
SELECT [SCHEMAS].[NAME] + '.' + [OBJECTS].[NAME] AS [TABLE_NAME], 
       [INDEXES].[INDEX_ID]                      AS [INDEX ID], 
       [STATS].[NAME]                            AS [STATISTIC], 
       STUFF((SELECT ', ' + [COLUMNS].[NAME] 
              FROM   [SYS].[STATS_COLUMNS] [STATS_COLUMN] 
                     JOIN [SYS].[COLUMNS] [COLUMNS] 
                       ON [COLUMNS].[COLUMN_ID] = [STATS_COLUMN].[COLUMN_ID] 
                          AND [COLUMNS].[OBJECT_ID] = [STATS_COLUMN].[OBJECT_ID] 
              WHERE  [STATS_COLUMN].[OBJECT_ID] = [STATS].[OBJECT_ID] 
                     AND [STATS_COLUMN].[STATS_ID] = [STATS].[STATS_ID] 
              ORDER  BY [STATS_COLUMN].[STATS_COLUMN_ID] 
              FOR XML PATH('')), 1, 2, '')       AS [COLUMNS_IN_STATISTIC] 
FROM   [SYS].[STATS] [STATS] 
       JOIN [SYS].[OBJECTS] AS [OBJECTS] 
         ON [STATS].[OBJECT_ID] = [OBJECTS].[OBJECT_ID] 
       JOIN [SYS].[SCHEMAS] AS [SCHEMAS] 
         ON [OBJECTS].[SCHEMA_ID] = [SCHEMAS].[SCHEMA_ID] 
       LEFT OUTER JOIN [SYS].[INDEXES] AS [INDEXES] 
                    ON [OBJECTS].[OBJECT_ID] = [INDEXES].[OBJECT_ID] 
                       AND [STATS].[NAME] = [INDEXES].[NAME] 
WHERE  [OBJECTS].[OBJECT_ID] = OBJECT_ID(N'HUMANRESOURCES.EMPLOYEE') 
ORDER  BY [STATS].[USER_CREATED] 

GO

A consulta acima preenche os seguintes detalhes
  1. A tabela na qual as estatísticas são criadas.
  2. ID do índice.
  3. Nome das estatísticas.
  4. Colunas incluídas nas estatísticas.

Segue a saída:



Na próxima seção, explicarei diferentes maneiras de atualizar as estatísticas.

Diferentes abordagens para atualização de estatísticas


Podemos atualizar as estatísticas das seguintes maneiras:
  1. Crie um plano de manutenção do SQL Server.
  2. Crie usando o script personalizado.
  3. Execute manualmente o comando de atualização de estatísticas em uma tabela individual.

Em primeiro lugar, explicarei como podemos criar um plano de manutenção para atualizar as estatísticas.

Criar plano de manutenção do SQL Server para atualizar as estatísticas


Agora, nesta demonstração, criaremos um plano de manutenção de estatísticas de atualização para atualizar as estatísticas. O plano de manutenção executará as seguintes tarefas:

Primeiro Crie um plano de manutenção. Para fazer isso, abra o SQL Server Management Studio. Expanda SQL server instance>>Management folder>> Em Management, clique com o botão direito do mouse em MaintenancePplans e selecione New Maintenance Plan. Veja a seguinte imagem:



O Novo Plano de Manutenção caixa de diálogo é aberta. Na caixa, forneça um nome do plano de manutenção e clique em OK. Veja a seguinte imagem:



O designer do plano de manutenção é aberto. Na caixa de ferramentas do designer do plano de manutenção, arraste e solte “Update Statistics Task” na janela do designer. Veja a seguinte imagem:



Agora clique duas vezes em Atualizar tarefa de estatísticas . A Tarefa de atualização de estatísticas caixa de diálogo é aberta. Na caixa de diálogo, existem opções que podem ser usadas para personalizar o plano de manutenção. Veja a seguinte imagem:



Podemos personalizar as seguintes opções ao usar o Plano de manutenção de estatísticas de atualização.
  1. Atualize estatísticas de todos os objetos de um banco de dados específico. Veja a imagem a seguir:
  2. Objetos específicos de bancos de dados selecionados. Você pode atualizar as estatísticas de todas as tabelas e exibições / tabelas e exibições específicas. Veja a imagem a seguir:

    Se escolhermos Tabelas ou Visualizações, o SQL preencherá o nome das visualizações ou tabelas na seleção caixa de diálogo. Veja a imagem a seguir:
  3. A terceira opção é Atualizar . Podemos atualizar todas as estatísticas de tabelas/visualizações, ou podemos optar por atualizar apenas estatísticas de coluna (estatísticas criadas em colunas não indexadas), ou podemos escolher Estatísticas de índice apenas (estatísticas criadas por índices). Veja a imagem a seguir:
  4. Também podemos selecionar o tipo de verificação de qualquer estatística. Podemos escolher Verificação completa ou Amostra por uma porcentagem especificada ou linhas especificadas. Veja a imagem a seguir:

Agora, como mencionei, criaremos uma tarefa de manutenção que atualizará as estatísticas de todas as tabelas do AdventureWorks2017 banco de dados com uma varredura completa. Portanto, escolha as opções de acordo. Depois que a tarefa de manutenção estiver configurada, ela terá a seguinte aparência:



Depois que a tarefa de manutenção estiver configurada corretamente, feche a caixa de diálogo de atualização de estatísticas. Após a configuração, o plano de manutenção se parece com o seguinte:



Uma vez criado o plano de manutenção, vamos agendar o plano de manutenção. Para fazer isso, clique no ícone de calendário ao lado da Descrição coluna. Veja a seguinte imagem:



Depois de clicar no botão de calendário, uma caixa de diálogo para configurar o agendamento do trabalho é aberta. Veja a seguinte imagem:



Como mencionei, nosso plano de manutenção de estatísticas de atualização será executado todos os domingos às 4h. Então, vamos configurar o agendamento de trabalho de acordo. O agendamento de tarefas é simples. Depois de configurar o agendamento, a caixa de diálogo se parece com o seguinte:



Depois que um cronograma de execução é configurado, todo o plano de manutenção se parece com a imagem a seguir. Salve o plano de manutenção e feche a janela.



Agora, vamos executar este plano de manutenção executando o SQL Job criado pelo plano de manutenção. Para abrir SQL Jobs, expanda SQL Server Agent e expanda Trabalhos . Você pode ver o SQL Job criado pelo plano de manutenção do SQL. Agora, para executar o trabalho, clique com o botão direito do mouse em Atualizar estatísticas semanalmente.Semanalmente.Subplan_1 e clique em Iniciar tarefa na etapa . Veja a imagem a seguir.



Depois que o trabalho for concluído, você poderá ver a seguinte caixa de diálogo Execução de trabalho bem-sucedida.


Resumo


Neste artigo, abordei:
  1. Uma explicação detalhada das estatísticas do SQL Server e sua importância.
  2. Diferentes opções para atualizar as estatísticas.
  3. Um exemplo funcional da criação de um plano de manutenção do SQL para atualizar as estatísticas.

No meu próximo artigo, explicarei vários comandos T-SQL para atualizar as estatísticas. Além disso, explicarei um Script T-SQL que atualizará as estatísticas com base no volume de alterações de dados que ocorreram após a inserção/atualização/exclusão na tabela.