Como otimizar o desempenho para bancos de dados MSSQL?

5

Sou um dba com um banco de dados com ~ 280 tabelas e um total de dados de ~ 1,5 GB. Eu gostaria de ajustar o banco de dados para torná-lo melhor.

O que você faz para manter o desempenho de seus bancos de dados SQL? Quanto você está lidando com índices, estatísticas e desfragmentação?

Quais são os maiores matadores / melhorias de desempenho e como você soluciona problemas para descobrir onde otimizar?

Editar: Este é um banco de dados de um sistema CRM de terceiros, por isso não tenho controle sobre o código. Eles adicionaram muitos índices (em lugares sensíveis), mas eu gostaria de saber como posso manter a velocidade do servidor.

Eu corro todas as noites

EXEC sp_MSforeachtable "dbcc dbreindex('?', '', 90)"

para reconstruir índices e (esperançosamente) atualizar estatísticas, usando um plano de manutenção. O mesmo plano também executa uma "tarefa de banco de dados de redução".

Quais outras tarefas de manutenção diárias / semanais ou otimizações únicas poderiam ser feitas?

Editar 2:

Dicas reunidas:

  • Não execute "Reduzir tarefa do banco de dados"
  • Desativar a propriedade "Redução automática"
  • Execute "EXEC sp_MSforeachtable" dbcc dbreindex ('?', '', 90) "
  • Em seguida, execute "EXEC sp_updatestats"
por Frode Lillerud 04.05.2009 / 18:05

7 respostas

9

você deve remover a parte do "banco de dados de redução" do seu plano de manutenção. "encolher banco de dados" irá fragmentar seu índice! aqui é um ótimo post de Paul S Randal, que explica isso em detalhes.

você pode reconstruir suas estatísticas com:

EXEC sp_updatestats

atualize suas estatísticas sempre após a reindexação do seu banco de dados. aqui é um post de Colin Stasiuk, que explica essa boa prática.

    
por 05.05.2009 / 00:50
8

Eu obtive ordens de magnitude de melhoria de desempenho apenas por indexação (embora eu não tenha realmente mexido com isso)

Depois de lidar com o óbvio (hardware decente, indexação e desfragmentação), você é a melhor fonte de desempenho para o seu próprio código.

    
por 04.05.2009 / 18:14
5

Verifique se o seu servidor SQL não está fazendo nada além de servir SQL, sem compartilhamento de arquivos, sem servidores web. Um banco de dados desse tamanho não deve ter nenhum problema de desempenho, a execução do Profiler ajudará a se concentrar em qualquer ponto lento.

Certifique-se de pré-alocar espaço suficiente para que o banco de dados não cresça automaticamente o tempo todo.

    
por 04.05.2009 / 20:06
2

Se você tem sp2 do sql2005, você pode (e já que você já é um dba provavelmente já fez) instalar o plugin de relatório de painel de desempenho. Depois de reiniciar o servidor, assisto ao monitor de desempenho em busca de índices úteis. o monitor de desempenho fornece uma riqueza de informações. Ao longo do tempo, descobri que ele se acumula em muita coisa (mas isso pode ser porque eu tenho uma configuração de banco de dados como fogbugz ... eu tenho muitos bancos de dados cliente, todos com a mesma estrutura, no mesmo servidor ... sql server irá tratar os índices necessários em cada um destes como separados e isso leva a um monte de efetivamente duplicar entradas no relatório). De qualquer forma, passo muito tempo olhando os relatórios de índice ausentes e adicionando / modificando índices como resultado.

com os melhores cumprimentos, don

    
por 04.05.2009 / 20:39
2

Cole os arquivos do banco de dados principal em discos físicos diferentes dos arquivos de log. ie - separe seus arquivos .MDF e seus .LDF .

    
por 05.05.2009 / 04:02
1

Todas as correções de hardware pedem desculpas, mas sugiro usar;

Windows 2008 de 64 bits Muita memória (16GB ou mais, eu sugiro, é barato no momento) Logs em um SSD, dados em um par espelhado de discos SCSI / SAS de 15krpm Idealmente, um par de chips da série Xeon 55xx.

Tudo isso vai custar dinheiro, obviamente, mas garantirá aumentos significativos de desempenho rapidamente - você pode melhorar seu banco de dados, mas isso leva tempo (o que também custa, é claro) e não é garantido para torná-lo mais rápido.

    
por 04.05.2009 / 18:23
1

Teste o seu processo sql / stored no SQL Management Studio. Quando você executá-los, ative Exibir plano de execução e estatísticas do cliente. Procure por varreduras de tabelas ou outras etapas que usem grandes porcentagens do tempo de execução. Se você estiver executando o SQL 2008, ele sugerirá índices que farão com que seu código seja executado mais rapidamente.

    
por 05.05.2009 / 04:55