Partilhar via


Monitorar o uso de memória

Aplica-se a: SQL Server

Monitore uma instância do SQL Server periodicamente para confirmar que o uso de memória está dentro de intervalos normais.

Configurar a memória máxima do SQL Server

Por padrão, uma instância do SQL Server pode, ao longo do tempo, consumir a maior parte da memória disponível do sistema operacional Windows no servidor. Depois que a memória for adquirida, ela não será liberada a menos que uma pressão sobre a memória seja detectada. Esse comportamento ocorre desde a concepção e não indica um vazamento de memória no processo do SQL Server. Use a opção max server memory para limitar a quantidade de memória que o SQL Server pode adquirir para a maioria dos respectivos usos. Para obter mais informações, confira o Guia de arquitetura de gerenciamento de memória.

No SQL Server em Linux, defina o limite de memória com a ferramenta mssql-conf e a configuração memory.memorylimitmb.

Monitorar a memória do sistema operacional

Para monitorar uma condição da memória baixa, use os contadores de servidor do Windows a seguir. Muitos contadores de memória do sistema operacional podem ser consultados por meio das exibições de gerenciamento dinâmico sys.dm_os_process_memory e sys.dm_os_sys_memory.

  • Memória: Bytes disponíveis
    Esse contador indica quantos bytes de memória estão atualmente disponíveis para uso dos processos. Valores baixos para o contador Bytes Disponíveis podem indicar uma escassez geral de memória do sistema operacional. Esse valor pode ser consultado por meio do T-SQL usando sys.dm_os_sys_memory.available_physical_memory_kb.

  • Memória: Páginas/segundo
    Esse contador indica o número de páginas que foram recuperadas do disco devido a falhas de página física ou gravadas no disco para liberar espaço no conjunto de trabalho devido a falhas de página. Uma taxa alta no contador Páginas/s pode indicar paginação excessiva.

  • Memória: Falhas de Página/s Esse contador indica a taxa de Falhas de Página para todos os processos, incluindo processos do sistema. Uma taxa de paginação para o disco baixa, mas diferente de zero (e, logo, de falhas de página) é normal, mesmo que o computador tenha muita memória disponível. O Gerenciador de Memória Virtual (VMM) do Microsoft Windows conta as páginas do SQL Server e de outros processos, organizando os tamanhos de conjunto de trabalho desses processos. Essa atividade do VMM tende a causar falhas de página.

  • Processo: Falhas de Página/s Esse contador indica a taxa de Falhas de Página para um determinado processo de usuário. Monitore Falhas de página/s para determinar se a atividade do disco é causada pela paginação pelo SQL Server. Para determinar se o SQL Server ou outro processo é a causa da paginação excessiva, monitore o contador Processo: Falhas de Página/s para a instância do processo do SQL Server.

Para obter mais informações sobre como solucionar a paginação excessiva, confira a documentação do sistema operacional.

Isolar a memória usada pelo SQL Server

Para monitorar o uso de memória do SQL Server, use os contadores de objeto do SQL Server a seguir. Muitos contadores de objetos SQL Server podem ser consultados por meio das exibições de gerenciamento dinâmico sys.dm_os_performance_counters ou sys.dm_os_process_memory.

Por padrão, o SQL Server gerencia os requisitos de memória dinamicamente com base nos recursos do sistema disponíveis. Se o SQL Server precisar de mais memória, ele consultará o sistema operacional para determinar se há memória física livre disponível e a usará. Se houver pouca memória livre para o SO, o SQL Server vai liberar a memória para o sistema operacional até que a condição de pouca memória seja aliviada ou até que o SQL Server atinja o limite de memória mínima do servidor. Porém, é possível substituir a opção de usar a memória dinamicamente, por meio das opções de configuração do servidor min server memory e max server memory. Para obter mais informações, consulte Opções de memória do servidor.

Para monitorar a quantidade de memória utilizada pelo SQL Server, examine os seguintes contadores de desempenho:

  • SQL Server: Gerenciador de Memória: Memória total do servidor (KB)
    Esse contador indica a quantidade de memória do sistema operacional que o gerenciador de memória do SQL Server dispensa atualmente para o SQL Server. Esse número deve aumentar conforme exigido pela atividade real e aumentará após a inicialização do SQL Server. Consulte esse contador usando a exibição de gerenciamento dinâmico sys.dm_os_sys_info, observando a coluna committed_kb.

  • SQL Server: Gerenciador de Memória: Memória do Servidor de Destino (KB)
    Esse contador indica uma quantidade ideal de memória que o SQL Server pode consumir, com base na carga de trabalho recente. Compare com Memória Total do Servidor após um período de operação típico para determinar se o SQL Server tem uma quantidade desejada de memória alocada. Após a operação típica, Memória Total do Servidor e Memória do Servidor de Destino devem ser semelhantes. Se Memória Total do Servidor for significativamente menor do que Memória do Servidor de Destino, a instância do SQL Server poderá estar sofrendo demanda de memória. Durante um período após o SQL Server ser iniciado, espera-se que Memória Total do Servidor seja menor do que Memória do Servidor de Destino, já que a Memória Total do Servidor aumenta. Consulte esse contador usando a exibição de gerenciamento dinâmico sys.dm_os_sys_info, observando a coluna committed_target_kb. Para obter mais informações e práticas recomendadas para configurar a memória, confira as opções de configuração de memória do servidor.

  • Processo: Conjunto de trabalho
    Esse contador indica a quantidade de memória física que está sendo usada por um processo atualmente, de acordo com o sistema operacional. Observe a instância sqlservr.exe desse contador. Consulte esse contador usando a exibição de gerenciamento dinâmico sys.dm_os_process_memory, observando a coluna physical_memory_in_use_kb.

  • Processo: Bytes Particulares
    Esse contador indica a quantidade de memória que um processo solicitou para o uso dele próprio ao sistema operacional. Observe a instância sqlservr.exe desse contador. Como esse contador inclui todas as alocações de memória solicitadas por sqlservr.exe, incluindo aquelas não limitadas pela opção max server memory, esse contador pode relatar valores maiores do que a opção max server memory.

  • SQL Server: Gerenciador de Buffer: Páginas de Banco de Dados
    Esse contador indica o número de páginas no pool de buffers do nó com conteúdo de banco de dados. Não inclui outra memória de pool de não buffer dentro do processo do SQL Server. Consulte esse contador usando a exibição de gerenciamento dinâmico sys.dm_os_performance_counters.

  • SQL Server: Gerenciador de Buffer: Taxa de acertos do cache do buffer
    Esse contador é específico do SQL Server. Uma taxa de 90 ou superior é desejável. Um valor maior que 90% indica que mais de 90% de todas as solicitações de dados foram satisfeitas pelo cache de dados na memória, sem necessidade de leitura do disco. Para obter mais informações sobre o Gerenciador de Buffer do SQL Server, confira Objeto Gerenciador de Buffer do SQL Server. Consulte esse contador usando a exibição de gerenciamento dinâmico sys.dm_os_performance_counters.

  • SQLServer: Gerente de Buffer: Duração prevista da página
    Esse contador mede a quantidade de tempo em segundos que a página mais antiga permanece no pool de buffers. Para sistemas que usam uma arquitetura NUMA, essa é a média entre todos os nós NUMA. Um valor mais alto e crescente é preferível. Uma queda repentina indica uma rotatividade significativa de dados dentro e fora do pool de buffers, indicando que a carga de trabalho não pôde se beneficiar totalmente dos dados já existentes na memória. Cada nó NUMA tem um nó próprio do pool de buffers. Em servidores com mais de um nó NUMA, veja a duração prevista da página de cada nó do pool de buffers usando SQL Server: Nó do Buffer: Duração prevista da página. Consulte esse contador usando a exibição de gerenciamento dinâmico sys.dm_os_performance_counters.

Exemplos

Determinar a alocação de memória atual

As consultas a seguir retornam informações sobre a memória alocada atualmente.

SELECT
(total_physical_memory_kb/1024) AS Total_OS_Memory_MB,
(available_physical_memory_kb/1024)  AS Available_OS_Memory_MB
FROM sys.dm_os_sys_memory;

SELECT  
(physical_memory_in_use_kb/1024) AS Memory_used_by_Sqlserver_MB,  
(locked_page_allocations_kb/1024) AS Locked_pages_used_by_Sqlserver_MB,  
(total_virtual_address_space_kb/1024) AS Total_VAS_in_MB,
process_physical_memory_low,  
process_virtual_memory_low  
FROM sys.dm_os_process_memory;  

Determinar o uso de memória atual do SQL Server

A consulta a seguir retorna informações sobre o uso de memória atual do SQL Server.

SELECT
sqlserver_start_time,
(committed_kb/1024) AS Total_Server_Memory_MB,
(committed_target_kb/1024)  AS Target_Server_Memory_MB
FROM sys.dm_os_sys_info;

Determinar a duração prevista da página

A consulta a seguir usa sys.dm_os_performance_counters para observar o valor atual da duração prevista da página da instância do SQL Server no nível geral do gerenciador de buffer e no nível de cada nó NUMA.

SELECT
CASE instance_name WHEN '' THEN 'Overall' ELSE instance_name END AS NUMA_Node, cntr_value AS PLE_s
FROM sys.dm_os_performance_counters    
WHERE counter_name = 'Page life expectancy';