Usuário com melhor resposta
Definir consumo de memória do SQL Server

Pergunta
-
Senhores, eu definir para o SQL Server consume somente 8GB de memória atravez desse comando:
sp_configure "show advanced options", 1;
GO
RECONFIGURE;
GO
sp_configure "max server memory", 8192;
GO
RECONFIGURE;
GO
O SQL não esta obedecendo, está consumido toda memória do SERVIDOR impactando em outro serviços.
Como posso resolver?
Obrigado!
Respostas
-
Rubem,
Além disso, já vi muita gente se preocupar com o uso de memória do SQL Server e fazer o monitoramento através da ferramenta Task Manager do Windows, esse é um grande equivoco, na verdade o Task Manager não apresenta a memória total que esta alocado para o SQL Server em suas áreas de processamento e Buffer Pool, na verdade ele apresenta o quando o serviço do SQL Server esta alocando no momento.
A melhor forma de obter informações sobre memória é utilizar a ferramenta Perfmon do Windows, adicionando os contadors Target Server Memory e Total Server Memory da categoria - SQL Server: Memory Manager.
Além disso, você poderá utilizar o comando DBCC MemoryStatus, como também, os exemplos abaixo:
-- Informações sobre o uso e consumo de memória --
select counter_name, cntr_value, cast((cntr_value/1024.0)/1024.0 as numeric(8,2)) as Gb from sys.dm_os_performance_counters where counter_name like '%server_memory%';
-- Informações sobre alocação de memória --
WITH RingBuffer AS (SELECT CAST(dorb.record AS XML) AS xRecord, dorb.timestamp FROM sys.dm_os_ring_buffers AS dorb WHERE dorb.ring_buffer_type = 'RING_BUFFER_RESOURCE_MONITOR' ) SELECT xr.value('(ResourceMonitor/Notification)[1]', 'varchar(75)') AS RmNotification, xr.value('(ResourceMonitor/IndicatorsProcess)[1]','tinyint') AS IndicatorsProcess, xr.value('(ResourceMonitor/IndicatorsSystem)[1]','tinyint') AS IndicatorsSystem, DATEADD(ms, -1 * dosi.ms_ticks - rb.timestamp, GETDATE()) AS RmDateTime, xr.value('(MemoryNode/TargetMemory)[1]','bigint') AS TargetMemory, xr.value('(MemoryNode/ReserveMemory)[1]','bigint') AS ReserveMemory, xr.value('(MemoryNode/CommittedMemory)[1]','bigint') AS CommitedMemory, xr.value('(MemoryNode/SharedMemory)[1]','bigint') AS SharedMemory, xr.value('(MemoryNode/PagesMemory)[1]','bigint') AS PagesMemory, xr.value('(MemoryRecord/MemoryUtilization)[1]','bigint') AS MemoryUtilization, xr.value('(MemoryRecord/TotalPhysicalMemory)[1]','bigint') AS TotalPhysicalMemory, xr.value('(MemoryRecord/AvailablePhysicalMemory)[1]','bigint') AS AvailablePhysicalMemory, xr.value('(MemoryRecord/TotalPageFile)[1]','bigint') AS TotalPageFile, xr.value('(MemoryRecord/AvailablePageFile)[1]','bigint') AS AvailablePageFile, xr.value('(MemoryRecord/TotalVirtualAddressSpace)[1]','bigint') AS TotalVirtualAddressSpace, xr.value('(MemoryRecord/AvailableVirtualAddressSpace)[1]','bigint') AS AvailableVirtualAddressSpace, xr.value('(MemoryRecord/AvailableExtendedVirtualAddressSpace)[1]','bigint') AS AvailableExtendedVirtualAddressSpace FROM RingBuffer AS rb CROSS APPLY rb.xRecord.nodes('Record') record (xr) CROSS JOIN sys.dm_os_sys_info AS dosi ORDER BY RmDateTime DESC;
-- Quantidade de memória disponível --
SELECT cntr_value/1024 AS 'Memory (MB)' FROM master.dbo.sysperfinfo WHERE object_name = 'SQLServer:Memory Manager' AND counter_name = 'Total Server Memory (KB)'
Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Sugerido como Resposta Roberto F FonsecaModerator segunda-feira, 26 de janeiro de 2015 11:55
- Marcado como Resposta Rubem Cerqueira segunda-feira, 26 de janeiro de 2015 12:57
Todas as Respostas
-
Rubem,
O SQL Server utiliza essencialmente memória, assim que ele adquire ele não libera. Permanece para seu uso e reuso.
Você tem duas opções:
- Reiniciar o serviço desta instância para que o SQL Server possa carregar esta alteração (execute apenas em um horário alternativo para evitar impacto para seus usuários);
- Executar o "RAMMap" para "limpar" às áreas de memória não utilizadas;
Se você não possui o RAMMap, faça o download com o link abaixo e utilize "quando necessário".
Para maiores informações veja:
https://technet.microsoft.com/en-us/sysinternals/ff700229.aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Roberto F FonsecaModerator segunda-feira, 26 de janeiro de 2015 11:55
-
Rubem,
Além disso, já vi muita gente se preocupar com o uso de memória do SQL Server e fazer o monitoramento através da ferramenta Task Manager do Windows, esse é um grande equivoco, na verdade o Task Manager não apresenta a memória total que esta alocado para o SQL Server em suas áreas de processamento e Buffer Pool, na verdade ele apresenta o quando o serviço do SQL Server esta alocando no momento.
A melhor forma de obter informações sobre memória é utilizar a ferramenta Perfmon do Windows, adicionando os contadors Target Server Memory e Total Server Memory da categoria - SQL Server: Memory Manager.
Além disso, você poderá utilizar o comando DBCC MemoryStatus, como também, os exemplos abaixo:
-- Informações sobre o uso e consumo de memória --
select counter_name, cntr_value, cast((cntr_value/1024.0)/1024.0 as numeric(8,2)) as Gb from sys.dm_os_performance_counters where counter_name like '%server_memory%';
-- Informações sobre alocação de memória --
WITH RingBuffer AS (SELECT CAST(dorb.record AS XML) AS xRecord, dorb.timestamp FROM sys.dm_os_ring_buffers AS dorb WHERE dorb.ring_buffer_type = 'RING_BUFFER_RESOURCE_MONITOR' ) SELECT xr.value('(ResourceMonitor/Notification)[1]', 'varchar(75)') AS RmNotification, xr.value('(ResourceMonitor/IndicatorsProcess)[1]','tinyint') AS IndicatorsProcess, xr.value('(ResourceMonitor/IndicatorsSystem)[1]','tinyint') AS IndicatorsSystem, DATEADD(ms, -1 * dosi.ms_ticks - rb.timestamp, GETDATE()) AS RmDateTime, xr.value('(MemoryNode/TargetMemory)[1]','bigint') AS TargetMemory, xr.value('(MemoryNode/ReserveMemory)[1]','bigint') AS ReserveMemory, xr.value('(MemoryNode/CommittedMemory)[1]','bigint') AS CommitedMemory, xr.value('(MemoryNode/SharedMemory)[1]','bigint') AS SharedMemory, xr.value('(MemoryNode/PagesMemory)[1]','bigint') AS PagesMemory, xr.value('(MemoryRecord/MemoryUtilization)[1]','bigint') AS MemoryUtilization, xr.value('(MemoryRecord/TotalPhysicalMemory)[1]','bigint') AS TotalPhysicalMemory, xr.value('(MemoryRecord/AvailablePhysicalMemory)[1]','bigint') AS AvailablePhysicalMemory, xr.value('(MemoryRecord/TotalPageFile)[1]','bigint') AS TotalPageFile, xr.value('(MemoryRecord/AvailablePageFile)[1]','bigint') AS AvailablePageFile, xr.value('(MemoryRecord/TotalVirtualAddressSpace)[1]','bigint') AS TotalVirtualAddressSpace, xr.value('(MemoryRecord/AvailableVirtualAddressSpace)[1]','bigint') AS AvailableVirtualAddressSpace, xr.value('(MemoryRecord/AvailableExtendedVirtualAddressSpace)[1]','bigint') AS AvailableExtendedVirtualAddressSpace FROM RingBuffer AS rb CROSS APPLY rb.xRecord.nodes('Record') record (xr) CROSS JOIN sys.dm_os_sys_info AS dosi ORDER BY RmDateTime DESC;
-- Quantidade de memória disponível --
SELECT cntr_value/1024 AS 'Memory (MB)' FROM master.dbo.sysperfinfo WHERE object_name = 'SQLServer:Memory Manager' AND counter_name = 'Total Server Memory (KB)'
Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Sugerido como Resposta Roberto F FonsecaModerator segunda-feira, 26 de janeiro de 2015 11:55
- Marcado como Resposta Rubem Cerqueira segunda-feira, 26 de janeiro de 2015 12:57