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.

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

Monitorar a memória do sistema operacional

Para monitorar uma condição de pouca memória, use os seguintes contadores do servidor Windows. 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 erros graves de página ou gravadas no disco para liberar espaço no conjunto de trabalho em decorrência de erros 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 baixa, mas não nula, de paginação para disco (e, portanto, de falhas de página) é típica, mesmo que o computador tenha bastante memória disponível. O Gerenciador de Memória Virtual (VMM) do Microsoft Windows retira páginas do SQL Server e de outros processos à medida que reduz os tamanhos dos conjuntos de trabalho desses processos. Essa atividade do VMM tende a causar falhas de página.

  • Processo: Falhas de Página/seg Esse contador indica a taxa de falhas de página de um determinado processo de usuário. Monitore Processo: Falhas de Página/s para determinar se a atividade de disco é causada pela paginação do SQL Server. Para determinar se o SQL Server ou outro processo está causando paginação excessiva, monitore o contador Processo: Falhas de Página/s para a instância de 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 o seguinte Use SQL Server Objects. 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 tem atualmente alocada 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 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 fora do pool de buffers 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 grande movimentação de dados entrando e saindo do pool de buffers, indicando que a carga de trabalho não conseguiu se beneficiar plenamente dos dados já presentes na memória. Cada nó NUMA tem um nó próprio do pool de buffers. Em servidores com mais de um nó NUMA, exiba a expectativa de vida da página de cada nó do pool de buffers usando SQL Server: Buffer Node: Page life expectancy. 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 vida útil da página

A consulta a seguir usa sys.dm_os_performance_counters para observar o valor atual de page life expectancy da instância do SQL Server no nível geral do Buffer Manager 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';