![O SQL Server 2008 lê constantemente o arquivo MDF, desempenho péssimo](https://rvso.com/image/632763/O%20SQL%20Server%202008%20l%C3%AA%20constantemente%20o%20arquivo%20MDF%2C%20desempenho%20p%C3%A9ssimo%20.png)
Temos um aplicativo que executa o SQL Server 2008 R2 Express no back-end de um servidor virtual Windows 2008 R2 em execução no VMWare ESXi. Os usuários reclamam que o aplicativo é muito lento. Vejo IO de disco muito alto que não faz sentido para mim.
Fundo:
- O comprimento médio da fila de disco é de cerca de 60, o máximo é de cerca de 250
- A média de leituras de disco/s é em torno de 2.000, com máximo em torno de 3.500
- O Resource Monitor mostra que sqlservr.exe está lendo o arquivo .mdf em torno de 40-60 MB/s (veja abaixo). A escrita IO é muito baixa.
- O arquivo .mdf tem apenas 2 GB, o que significa que tudo deve caber na memória
- O servidor tem 32 GB de RAM e normalmente menos de 16 GB em uso
- O servidor possui 8 discos SAS de 15k em RAID10. É um Dell com um controlador PERC H710, que é capaz de usar um SSD para habilitar o CacheCade (cache de leitura baseado em SSD), que estou tentado a tentar, mas parece que tudo deveria ser armazenado em cache na RAM de qualquer maneira, então eu não tenho certeza se isso vai ajudar.
- A VM SQL fica em um servidor Dell executando o VMWare ESXi 5. Há outra VM nesse host ESXi, mas é um controlador de domínio com muito pouco IO.
- Este aplicativo era executado anteriormente em um servidor Windows 2003 independente. Atualizamos para o Windows 2008 R2 e também atualizamos o aplicativo para uma versão mais recente ao mesmo tempo, portanto, é possível que qualquer um desses fatores esteja contribuindo.
Quais são as opções para aprofundar isso? Existe uma maneira de ver o que o servidor SQL está fazendo nos bastidores (quais consultas estão sendo executadas, etc.)? Esse comportamento parece normal e a carga é demais para o armazenamento? Gostaria de saber se algo não está configurado corretamente.
Responder1
http://msdn.microsoft.com/en-us/library/cc645993(v=sql.105).aspx#Scalability
O Espress não usará mais de 1 GB de RAM para o processo SQL. Você precisa comprar e instalar pelo menos Web ou Standard para usar mais de 4 GB - ambos suportam 64, que é mais do que você tem, então escolha um deles.
Além disso, ser um DBA é um tópico bastante profundo, mas muito acessível via Technet e pelo arquivo de Ajuda. "Como posso saber quais consultas estão sendo executadas" é praticamente um tópico do primeiro dia (assim como saber qual edição é apropriada para uma determinada tarefa). O Profiler nem está disponível para Express, então você está em apuros como você está configurado agora.
Responder2
Observe os detalhes da consulta - verifique as consultas que possuem um IO físico ou lógico alto, isole-as, observe o plano de consulta. Já faz anos que usei uma versão desatualizada como 2008 R2... http://gallery.technet.microsoft.com/scriptcenter/Find-inefficient-query-88f4611fpode lhe dar um começo.
Minha indicação seria para índices ausentes que acionam varreduras de tabela. O criador de perfil e os assistentes de ajuste também podem ajudar a entender onde está o problema. SE o 2008 R2 já possui a visão geral das atividades no gerenciador então este possui uma bela janela com as consultas mais caras.