none
Consumo excessivo de memória RRS feed

  • Pergunta

  • Estou usando o SQL Server 2008 e ele esta consumindo muita memória do servidor, ele esta usando 5gb de memória, vai crescendo dia a dia o consumo e não descarrega da memória, quero descobrir qual aplicação não esta liberando a memória e as tabelas, tem como fazer isso?
    sexta-feira, 7 de outubro de 2011 14:45

Respostas

  • Solcar,

    Eu particularmente sempre utilizo a configuração de memória mínima e máxima, entendo que seja a melhor forma de tentar manter o ambiente o mais estável possível, e possibilitar a distribuição de recursos entre os serviços e dispositivo.

     

    Procuro sempre fazer uma análise identificando características de hardware, software, sistema operacional, recursos e funcionalidades em uso, plataforma de aplicativos, antes de definir qualquer quantidade.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    sexta-feira, 7 de outubro de 2011 18:53
    Moderador
  • Solrac,

    Eu concordo com os colegas quando te falaram pra configurar os valores de memória do SQL Server, tanto mínima quanto máxima.

    Acho que um ponto que deveria ser tratado também é identificar quem está consumindo sua memória dentro do SQL Server.

    Com a consulta a seguir, você vai ver qual o tamanho do Buffer Pool da sua instância:

    select
        count(*) AS Buffered_Page_Count
        ,count(*) * 8192 / (1024 * 1024) as Buffer_Pool_MB
    from sys.dm_os_buffer_descriptors

    Já com a consulta abaixo, você vai ver qual banco de dados está sendo o vilão de consumo de memória e quanto está ocupando no Buffer Pool:

    SELECT
        LEFT(CASE database_id
            WHEN 32767 THEN 'ResourceDb'
            ELSE db_name(database_id)
            END, 20) AS Database_Name,
        count(*)AS Buffered_Page_Count,
        count(*) * 8192 / (1024 * 1024) as Buffer_Pool_MB
    FROM sys.dm_os_buffer_descriptors
    GROUP BY db_name(database_id) ,database_id
    ORDER BY Buffered_Page_Count DESC

    Isso já vai te dar um indício do que pode estar causando seus problemas de memória. Depois dessa primeira fase de investigação, você vai ter que entrar pra dentro do banco de dados problemático e começar a investigar quais objetos estão consumindo muita memória.

    Espero ter ajudado.


    []'s


    Erickson Ricci
    Microsoft MCP, MCTS SQL Server 2005, 2008
    Visite o meu blog: http://ericksonricci.wordpress.com
    Me siga no twitter: @EricksonRicci
    LinkedIN: http://br.linkedin.com/in/ericksonricci
    e-mail: ericksonfabricio@gmail.com
    **Ajude a melhorar o sistema de busca do fórum.Marque a(s) resposta(s) que foram úteis**
    **Se esta resposta solucionou a questão, então, por favor, marque-a como resposta.**
    • Marcado como Resposta CEFL quinta-feira, 13 de outubro de 2011 12:17
    sexta-feira, 7 de outubro de 2011 22:32

Todas as Respostas

  • Solrac,

     

    O SQL Server não ira liberar memoria, enquanto o consumo puder crescer em relação sua memoria maxima + memoria fisica maxima, ele ira crescer. Existe um processo denominado Lazzy Writer, que, caso alguma outra aplicação necessite de memoria, este processo retira as paginas não utilizadas, por default este processo é executado a cada 1 segundo.


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    sexta-feira, 7 de outubro de 2011 15:00
    Moderador
  • Tem sim Solrac, você pode estar usando o SQL Server Profiler para fazer uma busca das consultas  aonde tem um maior número de linhas e verifique se tem algo a melhorar em suas consultas.

    Você pode também limitar a memória usada pelo SQL Server, sendo que suas consultas podem ficar lentas:

    Exemplo:

    USE master

    EXEC sp_configure ‘show advanced options’, 1        
    RECONFIGURE WITH OVERRIDE                       

    USE master
    EXEC sp_configure ‘max server memory (MB)’, 512     
    RECONFIGURE WITH OVERRIDE

    USE master
    EXEC sp_configure ‘show advanced options’, 0          
    RECONFIGURE WITH OVERRIDE

    sexta-feira, 7 de outubro de 2011 15:00
  • Eduardo,

     

    Sim,é possivel limitar a memoria, porem 512 não é recomendado, pois é muito pouco para uma instancia SQL, normalmente deixo em meus servidores exclusivos de banco de dados, 2~3GB para o Windows, e o resto para o banco.


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    sexta-feira, 7 de outubro de 2011 15:14
    Moderador
  • Isso mesmo Fabrizzio, no exemplo citei 512 realmente é muito pouco, obrigado pelo aviso.
    sexta-feira, 7 de outubro de 2011 15:37
  • Boa tarde pessol,

     

    Acho que quando pensamos em configução de memória do SQL Server a primeira coisa que devemos saber é se seu sistema operacional é 34 ou 64 bits porque isso faz toda a diferença.

     

    Solrac 2010, acho ima boa ideia limitar a quantidade de memória utilizada pelo SQL Server..

    Utilize a configuração que o Eduardo citou e nos diga seu sistema é 32 ou 64?

     

    abs


    Luan.Moreno [SQL Soul]|| Especialista SQL Server || MCTS SQL Server Admin e Dev @luansql
    sexta-feira, 7 de outubro de 2011 16:50
  • Solcar,

    Eu particularmente sempre utilizo a configuração de memória mínima e máxima, entendo que seja a melhor forma de tentar manter o ambiente o mais estável possível, e possibilitar a distribuição de recursos entre os serviços e dispositivo.

     

    Procuro sempre fazer uma análise identificando características de hardware, software, sistema operacional, recursos e funcionalidades em uso, plataforma de aplicativos, antes de definir qualquer quantidade.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    sexta-feira, 7 de outubro de 2011 18:53
    Moderador
  • Solrac,

    Eu concordo com os colegas quando te falaram pra configurar os valores de memória do SQL Server, tanto mínima quanto máxima.

    Acho que um ponto que deveria ser tratado também é identificar quem está consumindo sua memória dentro do SQL Server.

    Com a consulta a seguir, você vai ver qual o tamanho do Buffer Pool da sua instância:

    select
        count(*) AS Buffered_Page_Count
        ,count(*) * 8192 / (1024 * 1024) as Buffer_Pool_MB
    from sys.dm_os_buffer_descriptors

    Já com a consulta abaixo, você vai ver qual banco de dados está sendo o vilão de consumo de memória e quanto está ocupando no Buffer Pool:

    SELECT
        LEFT(CASE database_id
            WHEN 32767 THEN 'ResourceDb'
            ELSE db_name(database_id)
            END, 20) AS Database_Name,
        count(*)AS Buffered_Page_Count,
        count(*) * 8192 / (1024 * 1024) as Buffer_Pool_MB
    FROM sys.dm_os_buffer_descriptors
    GROUP BY db_name(database_id) ,database_id
    ORDER BY Buffered_Page_Count DESC

    Isso já vai te dar um indício do que pode estar causando seus problemas de memória. Depois dessa primeira fase de investigação, você vai ter que entrar pra dentro do banco de dados problemático e começar a investigar quais objetos estão consumindo muita memória.

    Espero ter ajudado.


    []'s


    Erickson Ricci
    Microsoft MCP, MCTS SQL Server 2005, 2008
    Visite o meu blog: http://ericksonricci.wordpress.com
    Me siga no twitter: @EricksonRicci
    LinkedIN: http://br.linkedin.com/in/ericksonricci
    e-mail: ericksonfabricio@gmail.com
    **Ajude a melhorar o sistema de busca do fórum.Marque a(s) resposta(s) que foram úteis**
    **Se esta resposta solucionou a questão, então, por favor, marque-a como resposta.**
    • Marcado como Resposta CEFL quinta-feira, 13 de outubro de 2011 12:17
    sexta-feira, 7 de outubro de 2011 22:32