SQL Server lento no ambiente de produção

6

Eu tenho um problema estranho no ambiente de produção de um cliente. Não posso fornecer detalhes sobre a infraestrutura, exceto que o SQL Server é executado em um servidor virtual. Os arquivos de dados, log e filestream estão em outro servidor de armazenamento (dados e filestream juntos e logon em um servidor separado).

No nosso ambiente local de teste, há uma consulta específica que é executada com estas durações:

  • first we clear the cache
  • 300ms (First time it takes longer, but from then on it's cached.)
  • 20ms
  • 15ms
  • 17ms

No ambiente de produção do cliente, o SQL Server é mais poderoso, estas são as durações (não tive os direitos para limpar o cache. Tentarei isso amanhã).

  • 2500ms
  • 2600ms
  • 2400ms

Os servidores no ambiente de produção do cliente são mais poderosos, mas eles têm servidores virtuais (nós não).

Qual poderia ser a causa ...

  • Memória insuficiente?
  • Fragmentação
  • ?
  • Armazenamento físico?

Como você lidaria com esse problema de desempenho?

EDITAR:

Algumas pessoas me perguntaram se o conjunto de dados é igual e é. Eu restaurei seu banco de dados em nosso ambiente. É verdade que esta foi a primeira coisa que eu olhei. (@ Everyone: Eu adicionei a edição porque será a primeira coisa que muitos vão pensar).

    
por Lieven Cardoen 18.03.2010 / 23:27

8 respostas

9

A causa pode não ser memória suficiente, fragmentação, armazenamento físico, bem como configurações diferentes no grau de paralelismo, contenção, diferentes tamanhos de tabela, estatísticas diferentes, diferentes níveis de patch SQL e assim por diante.

Então, realmente não é uma questão sobre o que está errado, mas como determinar o que está errado. Minha recomendação usual, que não é basicamente 'na minha experiência é isso ou que , é usar o Método de esperas e filas . Esta é uma abordagem bastante método que, finalmente, irá identificar o culpado e com isso, você terá a solução.

    
por 18.03.2010 / 23:37
3

Pode ser a contenção de memória, CPU, rede ou disco; no entanto, o conjunto de dados do cliente é maior?

Seu primeiro passo seria obter um plano de execução na consulta em si para garantir que não está varrendo as linhas. Você deve otimizar a consulta primeiro, pois você já disse que o servidor de banco de dados é robusto. O SQL Server Query Analyzer é a melhor ferramenta para isso.

    
por 18.03.2010 / 23:38
3

É bem possível que, mesmo com os mesmos dados que o seu sistema, eles possam gerar um plano de consulta diferente se as estatísticas estiverem desatualizadas. Eu executaria EXEC sp_updatestats e veria se isso faz diferença.

    
por 18.03.2010 / 23:43
2

Nós costumávamos ter um servidor que fazia isso. Aparentemente, alguém configurou os arquivos do banco de dados em uma matriz RAID 3 ... não é uma boa ideia!

Claro, pode ser qualquer coisa, mas verifique se a configuração do disco é.

    
por 18.03.2010 / 23:32
2

Poderia ser qualquer uma dessas coisas. Também pode ser uma rede lenta (ou um problema na rede), pois parece que você está usando algum tipo de SAN (s).

A escala de dados é a mesma no ambiente do cliente em comparação com o ambiente de teste? Esse é um erro que muitos desenvolvedores cometem, testando o desempenho em um conjunto de dados que não simula a escala de dados em produção.

Se você tiver acesso ao Profiler e ao PerfMon, provavelmente poderá diminuir o problema rapidamente.

    
por 18.03.2010 / 23:36
2

A maneira recomendada de depurar isso é examinar os contadores de desempenho do SQL Server (Iniciar / Executar / perfmon.exe). Demora um pouco de tempo para aprender quais são relevantes no seu caso, mas definitivamente vale a pena e ajuda a identificar exatamente esse tipo de problema.

Aqui estão alguns links rápidos que parecem bons para mim, Google sabem muito mais:

por 18.03.2010 / 23:42
1

O servidor de produção é o mesmo que a sua configuração de teste?

  1. Eles estão executando alguma outra coisa no servidor db
  2. Qualquer proteção contra vírus em execução no servidor
  3. Windows defender em execução?
  4. Algum outro processo que sobrecarrega o sistema

Você mencionou que os logs de dados e o sistema de arquivos estão em um servidor de armazenamento, com o que ele está conectado? Canal de fibra, 10/100 / 1GB? scsi? Qualquer coisa que não seja canal de fibra será lento !!!

O servidor de armazenamento é dedicado ao servidor db? Você está lutando por recursos?

    
por 19.03.2010 / 00:16
1

Dependendo da tecnologia de virtualização em uso, o servidor virtual realmente pode ser substancialmente pior, especialmente no que se refere à E / S de disco. Em uma máquina virtual, o acesso ao disco pode ser manipulado por uma camada de emulação ou driver que converte comandos no disco virtual em comandos no disco físico. Essa emulação geralmente apresenta latência adicional significativa e pode não ser capaz de aproveitar adequadamente a matriz de disco subjacente.

    
por 19.03.2010 / 11:31