Usuário com melhor resposta
Consumo excessivo de memória

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?
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]- Editado Junior Galvão - MVPMVP, Moderator sexta-feira, 7 de outubro de 2011 18:57
- Marcado como Resposta CEFL quinta-feira, 13 de outubro de 2011 12:17
-
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_descriptorsJá 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 DESCIsso 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
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- Editado Fabrizzio CaputoModerator sexta-feira, 7 de outubro de 2011 23:46
-
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 -
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 -
-
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 -
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]- Editado Junior Galvão - MVPMVP, Moderator sexta-feira, 7 de outubro de 2011 18:57
- Marcado como Resposta CEFL quinta-feira, 13 de outubro de 2011 12:17
-
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_descriptorsJá 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 DESCIsso 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