none
Baixo Consumo de Memória SQL Server 2017 RRS feed

  • Pergunta

  • Prezados,

    Migrei o banco de dados SQL Server 2008 R2 para o SQL Server 2017 e observei via gerenciador de tarefas que o consumo de memória não passa de 372 Mb.

    Revisei a configuração da utilização de memória mínima e máxima junto ao banco de dados e esta de 1.024 MB a 40.960 MB. 

    Cheguei a refazer esta configuração via script, porém nada mudou.

    Algum(a) colega encontrou resposta para esta questão, pois os usuários do sistema ERP questionam lentidão nos processos e estou achando que pode ter relação.

    Antes da migração, podia identificar no gerenciador de tarefas do Windows o consumo dos 40GB.

    Obrigado

    Alexandre


    quinta-feira, 27 de fevereiro de 2020 11:16

Todas as Respostas

  • Alexandre,

    Existem diversas dúvidas sobre como identificar a maneira correta para afirmar ou dizer o quanto o SQL Server esta consumindo de memória.

    Até a versão 2014 do SQL Server rodando em ambientes Windows 7, a Microsoft recomendava que todo controle e gerenciamento de memória fosse realizado e monitorado via SQL Server Management Studio, pois bem, este cenário mudou muito desde as novas versões do Windows Server 2012 e 2016 e principalmente com as novas versões do SQL Server rodando em Windows 10 e Linux.

    O Task Manager até o Windows Server 2008/R2 para versões do SQL Server 2014 ou inferior tinha a função de apresentar o quanto o executável do SQL Server estava consumindo de memória e não exatamente a instância, e ai que ficavamos com algumas dúvidas.

    Você destacou que esta utilizando o SQL Server 2017!

    Perguntas:

    1 - Gostaria de saber qual é a versão do Windows que esta utilizando?

    2 - Qual é a arquitetura do Hardware que você esta utilizando? É uma máquina física ou virtualizada?

    3 - Se for virtualizada, qual é o Hypervisor?

    4 - Por acaso esta utilizando configuração de memória dinâmica?

    Observação: Em relação as configurações mínimas e máximas de memória estes são valores que serão utilizados como balizadores para o Sistema Operacional e principalmente para o SQL Server, sabendo que mesmo que a configuração mínima esteja definida por exemplo como 1Gb, no caso o SQL Server identifique que não seja necessário utilizar esta quantidade, será utilizado somente o necessário.

    Para começarmos uma possível análise e validação, através do Management Studio, execute o Script abaixo e nosso retorno o resultado:

    -- Script - 1 -- Identificando o quanto de memória o SQL Server tem alocada no momento --

    select counter_name, cntr_value,
           cast((cntr_value/1024.0)/1024.0 as numeric(10,4)) as Gbs,
           cast((cntr_value/1024.0)/1024.0*1024 as numeric(10,2)) as Mbs
    
    from sys.dm_os_performance_counters
    where counter_name like '%Target server_memory%'
    OR counter_name like '%Total server_memory%'
    Go


    -- Script 2 -- Identificando a alocação atual de memória --

    SELECT 
      physical_memory_in_use_kb/1024 AS sql_physical_memory_in_use_MB, 
        large_page_allocations_kb/1024 AS sql_large_page_allocations_MB, 
        locked_page_allocations_kb/1024 AS sql_locked_page_allocations_MB,
        virtual_address_space_reserved_kb/1024 AS sql_VAS_reserved_MB, 
        virtual_address_space_committed_kb/1024 AS sql_VAS_committed_MB, 
        virtual_address_space_available_kb/1024 AS sql_VAS_available_MB,
        page_fault_count AS sql_page_fault_count,
        memory_utilization_percentage AS sql_memory_utilization_percentage, 
        process_physical_memory_low AS sql_process_physical_memory_low, 
        process_virtual_memory_low AS sql_process_virtual_memory_low
    FROM sys.dm_os_process_memory
    Go

    Atente-se ao valor apresentado para expressão: physical_memory_in_use_kb/1024 As sql_physical_memory_in_use_MB, ela que vai nos ajudar a identificar neste momento o consumo e alocação atual de memória para o SQL Server.

    Caso você queira saber o quanto o seu Sistema Operacional tem de memória total e memória livre para uso neste momento, podemos utilizar a sys.dm_os_sys_memory, veja o exemplo:

    ;With CTEOsMemory
    As
    (
    Select 
        (total_physical_memory_kb / 1024) as MemoriaFisicaTotal, 
        (available_physical_memory_kb / 1024) as MemoriaFisicaDisponivel
    from sys.dm_os_sys_memory)
    Select MemoriaFisicaTotal As 'Memória RAM Total em GBs',
           MemoriaFisicaDisponivel As 'Memória RAM Dispónivel em GBs',
           (MemoriaFisicaTotal-MemoriaFisicaDisponivel) As 'Memória RAM Alocada em GBs para uso'
    From CTEOsMemory
    Go



    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]



    quinta-feira, 27 de fevereiro de 2020 11:50
    Moderador
  • Deleted
    quinta-feira, 27 de fevereiro de 2020 12:06
  • Deleted
    quinta-feira, 27 de fevereiro de 2020 12:14