Compartilhar 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 consumir a maior parte da memória do sistema operacional Windows disponível 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. Isso é por design 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 disponíveis no momento para uso por 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/s Esse contador indica o número de páginas que foram recuperadas do disco devido a falhas de página ou gravadas em 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 seguintes Objetos do SQL Server. 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 memória livre baixa para o sistema operacional, o SQL Server liberará a memória de volta para o sistema operacional até que a condição de memória baixa seja atenuada ou até que o SQL Server atinja o limite mínimo de memória 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 configuração 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 atualmente se comprometeu com 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 a memória total do servidor for significativamente menor que a memória do servidor de destino, a instância do SQL Server poderá estar enfrentando pressão 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á em uso 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 privados Esse contador indica a quantidade de memória que um processo solicitou para seu próprio uso para o 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 Buffers: Páginas de Banco de Dados Esse contador indica o número de páginas no pool de buffers com o conteúdo do banco de dados. Não inclui outra memória de pool de não cofres no processo do SQL Server. Consulte esse contador usando a exibição de gerenciamento dinâmico sys.dm_os_performance_counters.

  • SQL Server: Gerenciador de Buffers: Taxa de Ocorrências do Cache de 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. Encontre mais informações sobre o Gerenciador de Buffers do SQL Server, consulte o SQL Server, objeto do Gerenciador de Buffers. Consulte esse contador usando a exibição de gerenciamento dinâmico sys.dm_os_performance_counters.

  • SQL Server: Gerenciador de Buffers: Expectativa de vida 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 variação significativa de dados dentro e fora do pool de buffers, indicando que a carga de trabalho não poderia se beneficiar totalmente dos dados já 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';