none
Identificar Consumo de Memória RRS feed

  • Pergunta

  • Boa noite!

    Estou passando um apuro hoje no serviço, estou tentando identificar quem esta consumindo toda a memória free do meu servidor sql, tentei olhar se havia processos bloqueados no sysproccess, matamos alguns usuario, mais infelizmente alguma coisa coisa esta consumindo toda memória free que tenho e não consigo identificar quem é?

    meu banco tem consumo de limite maximo e minimo ja definido.. mais parece que alguma conexao não esta sendo fechada e fica alocando memória

    Veja no print abaixo:

    Se algum puder me dar alguma dica...

    Desde ja, muito Obrigado!


    Fernando

    segunda-feira, 1 de outubro de 2012 20:47

Respostas

  • Rapaz, você pode encontrar esses cursores, mas primeiro você precisa identificar o ID que está chamando esse cursor, exemplo: Monte um trace no SQL profiler, na hora que identificar o ID que está exec sp_cursor, você pode montar a query baseada na function sys.dm_exec_cursors passando o parâmetro do ID encontrado no trace,

    Exemplo:

    SELECT c.session_id, c.properties, c.creation_time, c.is_open, t.text
    FROM sys.dm_exec_cursors (SPID ENCONTRADO NO TRACE) c
    CROSS APPLY sys.dm_exec_sql_text (c.sql_handle) t
    


    []'s

    terça-feira, 2 de outubro de 2012 17:15

Todas as Respostas

  • Fernando, qual é o limite máximo de memória definido para o SQL?

    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    segunda-feira, 1 de outubro de 2012 23:57
  • Acho que não é problema no sql server e sim o modo que ele trabalha, o sql trabalha com conceito de memória primária e secundária, a primária é a memória RAM ou CACHE já para secundária temos o Hard Disk (HD), ele trabalha dessa forma para o próprio desempenho, pois quando você executa uma query, pela primeira vez essa busca é feita no Hard disk e gravada na memory cache, quando for fazer a segunda consulta desse mesmo processo o sql não irá no HD fazer essa consulta e sim na memória cache, tendo um considerável ganho em desempenho, acelerando a execução de procedures, transações, querys e etc...

    Mas ai tem casos que o servidor começa a apresentar lentidão ou mensagens de erros por falta de memória, neste caso recomenda-se a necessidade de redimensionar a memória do sql server, mas seria legal fazer um levantamento certinho, seu servidor só trabalha com o servidor SQL Server?



    []'s

    terça-feira, 2 de outubro de 2012 12:03
  • Boa tarde Roberson, o limite maximo configurado é de 10GB

    Fernando

    terça-feira, 2 de outubro de 2012 15:38
  • Obrigado Fernando!

    sim trabalha apenas com sql server


    Fernando

    terça-feira, 2 de outubro de 2012 15:39
  • Estranho estar com 10gb limitado, o que te falei sobre memoria cache, o servidor iria gravar as informações das consultas apenas até consumir os 10gb, no seu gerenciador de tarefas do windows na aba Processes, verificou se é o sql mesmo que está saturando?

    Execute o script abaixo e reinicie o serviço de sua instância para verificar se o consumo continua aumentando.

    EXEC sys.sp_configure N'show advanced options', N'1'  RECONFIGURE WITH OVERRIDE
    GO
    EXEC sys.sp_configure N'max server memory (MB)', N'10240'
    GO
    RECONFIGURE WITH OVERRIDE
    GO
    EXEC sys.sp_configure N'show advanced options', N'0'  RECONFIGURE WITH OVERRIDE
    GO
    


    []'s

    terça-feira, 2 de outubro de 2012 16:13
  • Sim, configurei o limite da maxima para 10Gb e minima para 4GB.

    Acredito que seja alguma coisa no ERP que esta consumindo tanta memória, pois ontem havia apenas 4 usuarios a noite e quando pedi para eles sairem do sistema, na hora houve uma liberação de memória muito grande.

    verifiquei que esta sendo criado alguns cursores neste momento de pico e que esta tendo uma leitura em disco para ele, veja a primeira linha, ela é referente ao banco do ERP, porém como ele aparece fechado não consigue ver qual query estava sendo feita por ele, para identificar o programa que gera esse problema.

    vc saberia alguma forma de identificar a query que estava nesse api_cursor?
    Mais hoje a memória ja esta mais estavel


    Fernando

    terça-feira, 2 de outubro de 2012 16:44
  • Se configurou para um limite de 10Gb, com certeza é outro aplicativo (talvez este ERP) que está consumindo tanta memória. Seu problema dificilmente é o SQL Server.

    Aconselho a usar as ferramentas do Performance Monitor (do Windows) para monitorar estas leituras e escritas em disco, bem como a utilização da memória, para identificar quem exatamente está desgastando tanto seu servidor.

    Quanto aos comandos SQL, você pode utilizar o Profiler (que está no menu Iniciar, na pasta do SQl Server) para identificar os comandos com maior duração (ou os que mais consomem recursos).


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    terça-feira, 2 de outubro de 2012 16:49
  • Rapaz, você pode encontrar esses cursores, mas primeiro você precisa identificar o ID que está chamando esse cursor, exemplo: Monte um trace no SQL profiler, na hora que identificar o ID que está exec sp_cursor, você pode montar a query baseada na function sys.dm_exec_cursors passando o parâmetro do ID encontrado no trace,

    Exemplo:

    SELECT c.session_id, c.properties, c.creation_time, c.is_open, t.text
    FROM sys.dm_exec_cursors (SPID ENCONTRADO NO TRACE) c
    CROSS APPLY sys.dm_exec_sql_text (c.sql_handle) t
    


    []'s

    terça-feira, 2 de outubro de 2012 17:15
  • Obrigado, agora consigo examinar melhor cada situação...

    vlw!


    Fernando

    terça-feira, 2 de outubro de 2012 17:38