Desempenho lento do SqlServer Express
-
09-06-2019 - |
Pergunta
Estou testando um aplicativo da web .NET.Eu fiz isso por 2 motivos:Eu queria ver como era o desempenho em condições reais e também ter certeza de que não havíamos perdido nenhum problema durante os testes.Tínhamos 30 usuários simultâneos no aplicativo usando-o como fariam durante o curso normal de seus trabalhos.A maioria dos usuários tinha várias janelas do aplicativo abertas.
- 10 usuários:Nada mal
- 20 usuários:Desacelerando
- 30 usuários:Muito, muito lento, mas sem tempo limite
Ele foi carregado no servidor de produção.É um servidor virtual com processador Xeon de 2,66 GHz e 2 GB de RAM.Estamos usando Win2K3 SP2.Temos o .NET 1.1 e 2.0 carregado e estamos usando o SQLExpress SP1.
Verificamos novamente os índices de todas as tabelas e eles estavam como deveriam estar.
Como podemos melhorar o desempenho do nosso aplicativo?
Solução
Isso é apenas algo em que pensei, mas verifique quanta memória o SQL Server está usando quando você tem mais de 20 usuários - uma das limitações da versão Express é que ela é limitado a 1 GB de RAM.Portanto, pode ser apenas uma questão de não haver memória suficiente disponível para o servidor devido às limitações do Express.
Outras dicas
Você pode estar enfrentando problemas de simultaneidade, dependendo de como seu aplicativo é executado.Tente realizar suas leituras com a palavra-chave “nolock”.
Tente adicionar aliases de tabela para suas colunas (e evite o uso de SELECT *), isso ajuda o MSSQL, pois não é necessário "adivinhar" de qual tabela as colunas vêm.
Se ainda não o fez, mude para SPROCs, isso permite que o MSSQL indexe melhor seus dados para o conjunto de resultados normais de uma determinada consulta.
Tente seguir o plano de execução do seu SPROCS para garantir que eles estejam usando os índices que você acha que estão.
Execute um rastreamento em seu banco de dados para ver a aparência das solicitações recebidas.Você pode notar que um SPROC específico está sendo executado repetidamente:geralmente é um bom sinal armazenar em cache as respostas no cliente, se possível.(listas de pesquisa, etc.)
Atualizar:Parece que o SQL Server Express não é o problema, pois eles estavam usando o mesmo produto na versão anterior do aplicativo.Acho que seu próximo passo é identificar os gargalos.Se você tiver certeza de que está na camada de banco de dados, recomendo fazer um rastreamento do criador de perfil e reduzir o tempo de execução das consultas mais caras.
Este é outro link que uso para coletar estatísticas de DMVs (Exibições de gerenciamento dinâmico) do SQL Server e DMFs (funções de gerenciamento dinâmico) relacionadas.Não tenho certeza se podemos usar na edição Express.Descubra dados ocultos para otimizar o desempenho do aplicativo.
Você está usando o SQL Server Express para um aplicativo web?Pelo que eu sei, tem algumas limitações para implantação em produção.
SQL Server Expresso é gratuito e pode ser redistribuído por ISVs (sujeito a acordo). SQL Server Express é ideal para aprender e criar aplicativos de desktop e pequenos servidores.Esta edição é a melhor escolha para fornecedores de software independentes, desenvolvedores não profissionais e amadores que criam aplicativos clientes.Se você precisar de recursos de banco de dados mais avançados, o SQL Server Express pode ser atualizado facilmente para versões mais sofisticadas do SQL Server.
Gostaria de verificar o desempenho do disco no servidor virtual.Se esse for um dos problemas, recomendo colocar o banco de dados em um fuso separado.
Atualizar:Mude para um fuso separado ou atualize a versão do SQL Server, como Gulzar sugere apropriadamente.
certifique-se de fechar as conexões após recuperar os dados.
Execute o SQL Profiler para ver as consultas enviadas ao banco de dados.Procure consultas que sejam:
- retornando muitos dados
- mal construído
- estão sendo executados muitas vezes