none
Definir consumo de memória do SQL Server RRS feed

  • 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!

    sexta-feira, 23 de janeiro de 2015 12:13

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]

    sexta-feira, 23 de janeiro de 2015 17:28
    Moderador

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

    http://blogs.technet.com/b/askperf/archive/2010/08/13/introduction-to-the-new-sysinternals-tool-rammap.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"

    sexta-feira, 23 de janeiro de 2015 12:41
  • 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]

    sexta-feira, 23 de janeiro de 2015 17:28
    Moderador