Usuário com melhor resposta
Identificar Consumo de Memória

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
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
- Marcado como Resposta Fernando Miranda Domeneghetti terça-feira, 2 de outubro de 2012 17:32
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.brSe 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. -
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
-
-
-
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
-
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 estavelFernando
-
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.brSe 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. -
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
- Marcado como Resposta Fernando Miranda Domeneghetti terça-feira, 2 de outubro de 2012 17:32
-