none
Servidores SQL usando muita memoria / CPU RRS feed

  • Pergunta

  • Amigos,
    Aqui na minha empresa temos 4 sql servers.
    2 de desenvolvimento e 2 de produção
    1 sql 2000 e 3 2005
    todos os servidores SQL estao apresentando o mesmo problema
    o serviço sqlservr.exe usa 2gb de memoria de uma hora para outra
    o uso de processador nao passa de 40 a 50%

    Já procurei em alguns foruns e nada para resolver meu problema.
    - faço o transaction log shrink,
    - as maquinas tem SQL server dedicado (nada concorrente),
    - desativei tudo que nao precisa rodar no sql.

    Configuracao dos Servidores
    DELL POWER EDGE 2900
    4gb de memoria
    2 processadores de 2 nucleos Intel Xeon
    3 DISCOS SAS DE 73GB EM RAID 5
    120+ gb livre

    Preciso muito de uma ajuda, pois os sistemas estao caindo ou dando timeout
    Obrigado
    quinta-feira, 28 de maio de 2009 16:05

Respostas

  • Boa Tarde,

    Que bom que o SQL Server está usando muito memória. Quando ele faz isso, ele é capaz de manter mais páginas na memória e evitar usar o acesso a disco. Ruim seria se tivesse memória e ele não utilizasse. Idealmente é excelente quando o SQL Server consome toda a memória do servidor (se ele for dedicado). Significa que ele irá ter à sua disposição todos os recursos de memória disponíveis.

    Em 99% dos casos, procura-se um problema na utilização da memória que simplesmente não existe. O SQL Server é um banco de dados e todos os bancos de dados adoram memória. É tão mais cômodo buscar os dados em memória do que em disco. Se fosse possível, o bom mesmo é que eles colocassem todo o banco na memória. Eles diferem de servidores de aplicação que precisam instanciar e eliminar objetos o tempo todo da memória. Em servidores de aplicação, o melhor é que a memória seja liberada rapidamente para que a vazão de objetos a serem criados, usados e destruídos seja maior. Já para banco de dados o fluxo é o inverso. Uma vez na memória, tomára que não sai nunca mais.

    O problema não é a utilização da memória, mas sim, o que está se colocando na memória. Se o SQL Server está alocando mais memória do que o supostamente necessário, não é porque ele tem algo errado, mas sim porque estão solicitando coisas demais. Consultas mal feitas, ausência de índices, bloqueios em excesso, etc podem fazer com que muito mais memória seja gasta sem necessidade.

    Então o principal ponto não tentar observar o porque a memória está sendo alocada ou não, mas sim se as instruções que o SQL Server está processando estão ou não adequadas. Tente o Profiler e verifique as consultas que tem maior quantidades de linhas retornadas e principalmente de páginas alocadas (colunas rowcount e reads do Profiler). De posse dessas consultas verifique se elas estão adequadas e não poderiam ser otimizadas.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Como executar tarefas ao iniciar o SQL Server ?
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!570.entry
    Classifique as respostas. O seu feedback é imprescindível
    sexta-feira, 29 de maio de 2009 17:51
  • Bom dia Hugo,

    Você precisa também fazer um analise no hardware. Por ser um Servidor de Banco de Dados e nesta ocasião existem muitos acessos ao disco, seja para leitura ou gravação, é necessário identificar se a controladora dos discos está dando conta do recado e se os discos estão com o IOPS dentro da capacidade deles. Você relata que os discos estão em RAID 5, talvez isso possa estar contribuindo para esta falha. Sendo DELL, faça um DPACK (Suporte DELL) que esta analise irá de responder com gráficos sobre o fluxo do seu Servidor, e com base neste analise poderá seguir uma linha mais definida para analise do problema.

    O Ideal para Servidor de Banco de Dados seria o RAID10, pois assim você consegue dividir os IOPS pelos conjunto dos HDs.

    IOPS = Input/Output por segundo

    Att,

    Juan de Paula


    sexta-feira, 31 de julho de 2015 12:57

Todas as Respostas

  • Hugo,

    Como esta configurado o uso de memória para este servidor?


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quinta-feira, 28 de maio de 2009 18:02
    Moderador
  • Opa,


    sql2000
    Dinamicamente
    entre 0mb e 3327mb
    sem reserva

    sql2005
    use AWE marcado
    entre 0 e 2147483645
    index = 0
    minimun for query = 1024
    quinta-feira, 28 de maio de 2009 18:09
  • Hugo,

    Então esta configuração de memória esta permitindo que em ambos os servidores SQL Server, a memória possa ser utilizada de forma dinâmica, ou seja, o quanto for necessário será utilizada.


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quinta-feira, 28 de maio de 2009 18:23
    Moderador
  • mas ele faz isso fica usando a memoria +- quase 2gb de memoria
    e praticamante o servidor so da timeout
    e os sistemas caem

    quinta-feira, 28 de maio de 2009 18:48
  • Hugo,

    É isso mesmo, então teremos que analisar a melhor forma de consumo de memória, trabalhar com a configuração de memória mínima e máxima.

    Faça uma análise para definir o quanto e memória deverá ser definido para cada servidor.


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quinta-feira, 28 de maio de 2009 18:58
    Moderador
  • ja coloquei dentro de uma faixa de 500 a 1.5gb
    mas o time out continua em todas as aplicacoes
    quinta-feira, 28 de maio de 2009 19:08
  • Voces achao que problema de rede pode ocasionar isso ?
    quinta-feira, 28 de maio de 2009 20:43
  • Boa Tarde,

    Que bom que o SQL Server está usando muito memória. Quando ele faz isso, ele é capaz de manter mais páginas na memória e evitar usar o acesso a disco. Ruim seria se tivesse memória e ele não utilizasse. Idealmente é excelente quando o SQL Server consome toda a memória do servidor (se ele for dedicado). Significa que ele irá ter à sua disposição todos os recursos de memória disponíveis.

    Em 99% dos casos, procura-se um problema na utilização da memória que simplesmente não existe. O SQL Server é um banco de dados e todos os bancos de dados adoram memória. É tão mais cômodo buscar os dados em memória do que em disco. Se fosse possível, o bom mesmo é que eles colocassem todo o banco na memória. Eles diferem de servidores de aplicação que precisam instanciar e eliminar objetos o tempo todo da memória. Em servidores de aplicação, o melhor é que a memória seja liberada rapidamente para que a vazão de objetos a serem criados, usados e destruídos seja maior. Já para banco de dados o fluxo é o inverso. Uma vez na memória, tomára que não sai nunca mais.

    O problema não é a utilização da memória, mas sim, o que está se colocando na memória. Se o SQL Server está alocando mais memória do que o supostamente necessário, não é porque ele tem algo errado, mas sim porque estão solicitando coisas demais. Consultas mal feitas, ausência de índices, bloqueios em excesso, etc podem fazer com que muito mais memória seja gasta sem necessidade.

    Então o principal ponto não tentar observar o porque a memória está sendo alocada ou não, mas sim se as instruções que o SQL Server está processando estão ou não adequadas. Tente o Profiler e verifique as consultas que tem maior quantidades de linhas retornadas e principalmente de páginas alocadas (colunas rowcount e reads do Profiler). De posse dessas consultas verifique se elas estão adequadas e não poderiam ser otimizadas.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Como executar tarefas ao iniciar o SQL Server ?
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!570.entry
    Classifique as respostas. O seu feedback é imprescindível
    sexta-feira, 29 de maio de 2009 17:51
  • Maia,

    Por isso eu sugeri a análise para fazer a alocação de memória.

    Agora pelo que entendi este servidor não é dedicado ao SQL Server!!!


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sexta-feira, 29 de maio de 2009 17:58
    Moderador
  • Opa Amigos,
    o SQL 2000 é dedicado ao SQL
    Esse é o mais critico, nele fica o banco de dados de controle de ponto e catraca.
    a aplicaçao dica em outro servidor, e esse só tem o banco de dados
    é uma aplicaçao pesada, base 26,3 GB

    Acho que o Maia tem razao, falta uma otimizaçao do desenvolvedor
    agora esse profiler, nao sei como usar, se alguem tem um link para me passar agradeço (tutorial / programa)

    quanto a lentidao de rede, estamos com problemas em um dos swits de rede, acho que ele pode estar gerando timeout ou algo assim

    como faria essa analise Galvao ?

    Valeu
    sexta-feira, 29 de maio de 2009 18:09
  • Hugo,

    Esta análise inicia normalmente pelo acompanhamento e monitoramento do uso do seu servidor, como também, sobre as aplicações que fazem acesso a ele.

    Esta aplicação foi desenvolvida em qual linguagem?


    Este SQL Server 2000 esta com qual service pack instalado?


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sexta-feira, 29 de maio de 2009 19:23
    Moderador
  • Segunda eu respondo, o analista ja foi embora ;)
    sexta-feira, 29 de maio de 2009 19:40
  • Geralmente sistemas de catraca ficam mandando digamos mensagens constantemente para tabelas de cadastro como se fosse um PING e isso sobrecarrega sim um server (digamos se a aplicação for mal feita) , tive de trabalhar com um sistema que além do trafego monstruoso na rede que esse sisteminha proporcionava também ficava alocando processos inúteis no server.

    duas boas pedidas , analisar como é a chamada de dados desse sistema de que forma ele realiza as entradas no banco ,  e em segundo lugar seguir a risca o brilhante post do nosso MVP (Gustavo).

    Abraço a todos.
    Diogo Á. Di Pietro
    quinta-feira, 4 de junho de 2009 00:15
  • Bom dia Hugo,

    Você precisa também fazer um analise no hardware. Por ser um Servidor de Banco de Dados e nesta ocasião existem muitos acessos ao disco, seja para leitura ou gravação, é necessário identificar se a controladora dos discos está dando conta do recado e se os discos estão com o IOPS dentro da capacidade deles. Você relata que os discos estão em RAID 5, talvez isso possa estar contribuindo para esta falha. Sendo DELL, faça um DPACK (Suporte DELL) que esta analise irá de responder com gráficos sobre o fluxo do seu Servidor, e com base neste analise poderá seguir uma linha mais definida para analise do problema.

    O Ideal para Servidor de Banco de Dados seria o RAID10, pois assim você consegue dividir os IOPS pelos conjunto dos HDs.

    IOPS = Input/Output por segundo

    Att,

    Juan de Paula


    sexta-feira, 31 de julho de 2015 12:57