MSSQLSERVER_17890

Aplica-se a: SQL Server

Detalhes

Attribute Value
Nome do Produto SQL Server
ID do Evento 17890
Origem do evento MSSQLSERVER
Componente SQLEngine
Nome simbólico SRV_WS_TRIMMED
Texto da mensagem Uma parte significativa da memória de processo do SQL Server foi paginada. Isso pode resultar em uma degradação do desempenho. Duração: %d segundos. Conjunto de trabalho (KB): %I64d, confirmado (KB): %I64d, utilização da memória: %d%%.

Explanation

Pode encontrar a seguinte mensagem de erro no registo de erros do SQL Server ou no registo de eventos da Aplicação Windows.

Uma parte significativa da memória de processo do SQL Server foi paginada. Isso pode resultar em uma degradação do desempenho. Duração: 0 segundos. Conjunto de trabalho (KB): 3383250, comprometido (KB): 9112480, utilização de memória: 37%.

Também pode notar uma degradação súbita do desempenho na execução de consultas e em todas as outras operações no SQL Server.

Cause

O SQL Server monitoriza as várias informações relacionadas com memórias relacionadas com o processo do SQL Server. Neste caso, foi detetado que o conjunto de trabalho do processo é inferior a 50% da memória do processo comprometida. Como resultado, este aviso é publicado. As causas normais deste aviso são:

  • O sistema operativo paginaia grandes porções do SQL Server comprometido a memória no ficheiro de paginação.
  • Isto pode dever-se a um aumento súbito da procura de memória por parte de outras aplicações ou necessidades do sistema operativo.
  • Isto também pode acontecer quando certos drivers de dispositivos solicitam alocações de memória contíguas para as suas necessidades.

Ação do usuário

Pode impedir que o sistema operativo Windows faça a paginação da memória do buffer pool do processo SQL Server bloqueando a memória alocada para o buffer pool na memória física. Bloqueia a memória atribuindo as páginas bloqueadas na memória diretamente do utilizador à conta de utilizador que é usada como conta de arranque do serviço SQL Server. Mas antes de implementar esta solução, reveja as secções O que causa a paginação da memória do SQL Server e considerações importantes antes de atribuir o direito de utilizador "Bloquear páginas na memória" para uma instância do SQL Server

Note

Usar Páginas de Bloqueio na Memória garante que a memória gerida pelo SQL Server não é paginada. No entanto, pilhas de threads, o EXE e quaisquer imagens DLL, memória heap e CLR ainda podem ser paginados pelo sistema operativo.

A partir do SQL Server 2008 SP1 Cumulative Update 2, tanto as edições SQL Server Standard como Enterprise podem usar as páginas de bloqueio na memória à direita do utilizador. Para mais informações sobre suporte a páginas bloqueadas, consulte KB970070 - Suporte para Páginas Bloqueadas em sistemas SQL Server Edição Padrão (64 bits).

Para atribuir as páginas de bloqueio à direita do utilizador, siga estes passos:

  1. Clica em Iniciar, clica em Executar, escreve gpedit.msc e depois clica em OK.
  2. Nota: A caixa de diálogo de Política de Grupo aparece.
  3. Expandir Configuração do Computador e depois expandir Definições do Windows.
  4. Expanda as Definições de Segurança e depois expanda as Políticas Locais.
  5. Clique em Atribuição de Direitos de Utilizador e depois clique duas vezes em Bloquear páginas na memória.
  6. Na caixa de diálogo Definições de Política de Segurança Local , clique em Adicionar Utilizador ou Grupo.
  7. Na caixa de diálogo Selecionar Utilizadores ou Grupos , adicione a conta que tem permissão para executar o ficheiro Sqlservr.exe e depois clique em OK.
  8. Feche a caixa de diálogo da Política de Grupo .
  9. Reinicie o serviço SQL Server.

Depois de atribuir as páginas de bloqueio na memória à direita do utilizador e reiniciar o serviço SQL Server, o sistema operativo Windows deixa de paginar a memória do buffer pool dentro do processo SQL Server. No entanto, o sistema operativo Windows ainda pode paginar a memória do pool sem buffer dentro do processo do SQL Server.

Pode validar que o direito de utilizador é usado pela instância do SQL Server certificando-se de que a seguinte mensagem está escrita no Registo de Erros do SQL Server no arranque: "Usar páginas bloqueadas para pool de buffer"

Esta mensagem aplica-se apenas ao SQL Server. Para mais informações sobre esta mensagem no ERRORLOG, visite o seguinte: Tenho de atribuir as páginas de bloqueio para privilégio de memória no Sistema Local

Quando o sistema operativo Windows faz a página da memória do pool não-buffer, pode ainda assim encontrar problemas de desempenho. No entanto, as mensagens de erro mencionadas na secção "Explicação" não estão registadas no registo de erros do SQL Server.

O que faz com que a memória do SQL Server seja paginada

Existem três grandes categorias de problemas que podem causar este problema:

  • Application-Related Problemas: Todas as aplicações em conjunto esgotaram a memória física disponível e o sistema operativo tem de libertar alguma memória para novos pedidos de recursos de aplicação. Normalmente, a abordagem aqui é identificar que aplicações estão a esgotar a memória e tomar as medidas necessárias para equilibrar a memória entre elas sem levar ao esgotamento da RAM.
  • Problemas com o Driver de Dispositivo: Os Controladores de Dispositivo podem causar a paginação do conjunto de trabalho de todos os processos se o driver chamar incorretamente uma função de alocação de memória.
  • Problemas no Sistema Operativo

Abaixo, pode encontrar informações sobre cada uma destas categorias

  • Application-Related problemas: As aplicações em conjunto podem consumir toda a RAM do sistema. Se forem feitos novos pedidos de memória, o sistema operativo tenta satisfazê-los e, se não houver memória livre, irá cortar o conjunto de aplicações em execução para satisfazer os pedidos de memória. Nesses casos, pode observar que o conjunto de trabalho para a maioria, se não para todas as aplicações, diminui significativamente. Para observar isto, recolha o seguinte contador Performance Monitor para todas as aplicações no sistema:

    • Objeto de performance: Processo
    • Contador: Conjunto de Trabalho

    Além disso, monitorize o contador seguinte para correlacionar quanta memória física está disponível no sistema.

    • Objeto de desempenho: Memória
    • Contador: Memória Disponível (MB)

    O comportamento típico que pode observar é a redução da memória disponível próxima de 0 MB, enquanto ao mesmo tempo uma queda súbita dos contadores do Conjunto de Trabalho para a maioria (todos) os processos do sistema. Se observar este comportamento, poderá ser necessário tomar medidas para reduzir o uso de memória no sistema, o que inclui, por exemplo, a redução da Memória do Servidor Máximo para o SQL Server.

    As aplicações podem também usar demasiado o cache do sistema, o que pode causar um grande crescimento do cache do sistema. Para responder ao crescimento da cache do sistema, o sistema paginaia o conjunto de trabalho do processo do SQL Server ou de outras aplicações. Se experienciar este problema, pode usar algumas funções de gestão de memória na aplicação. Estas funções controlam o espaço de cache do sistema que as operações de I/O de ficheiros podem usar na aplicação. Por exemplo, pode usar a função SetSystemFileCacheSize e a função GetSystemFileCacheSize para controlar o espaço de cache do sistema que as operações de I/O de ficheiros podem usar.

    Pode usar o objeto de desempenho Memória para visualizar os valores de vários contadores neste objeto e determinar se o conjunto de trabalho da cache do sistema usa memória a mais. Por exemplo, pode visualizar os contadores de Bytes de Cache e de Bytes Residentes da Cache do Sistema. Para mais informações sobre este tema, veja:

    Pode descarregar e implementar o "Microsoft Windows Dynamic Cache Service" para controlar a memória consumida pela cache do sistema.

  • Problemas com o Controlador de Dispositivo: Se um controlador usar a MmAllocateContiguousMemory função, e se definir o valor do parâmetro HighestAcceptableAddress para menos de 4 gigabytes (GB), o sistema operativo Windows pode paginar o conjunto de trabalho dos processos no sistema, incluindo o processo do SQL Server. Para resolver este problema, contacte o fornecedor do controlador do dispositivo para atualizações dos drivers.

    Quando um controlador de dispositivo tenta alocar memória, o sistema operativo Windows pode paginar o conjunto de trabalho de outras aplicações. Este hotfix do Windows permite-te usar rastreamento de eventos para encontrar o driver do dispositivo que causa o problema. Para encontrar mais informações sobre o driver específico que causa o comportamento de trimming do conjunto de trabalho, veja Identificação de Controladores que Alocam Memória Contígua.

  • Problemas do Sistema Operativo: Para resolver os problemas conhecidos que fazem com que o sistema operativo Windows desligue o conjunto de trabalho do processo SQL Server, aplique os hotfixes descritos nos seguintes artigos da Base de Dados de Conhecimento Microsoft.

    Note

    Os hotfixes são cumulativos. Uma versão posterior de um hotfix contém as versões anteriores desse hotfix.

Considerações importantes antes de atribuir o direito de utilizador "Bloquear páginas na memória"

Deves fazer considerações adicionais antes de atribuires as páginas de bloqueio no direito de utilizador da memória. Se atribuir este direito ao utilizador em sistemas configurados incorretamente, o sistema pode tornar-se instável ou sofrer uma diminuição de desempenho em todo o sistema. Além disso, o ID de evento 333 pode ser registado no registo de eventos.

Se contactar o Serviço de Apoio ao Cliente da Microsoft (CSS) para estes problemas, os engenheiros do CSS podem pedir-lhe que revoge este direito de utilizador para a conta de utilizador usada como conta inicial do serviço SQL Server. Esta etapa pode ser necessária para recolher dados importantes de desempenho que os engenheiros de CSS possam usar para a configuração necessária das várias opções para o SQL Server e para outras aplicações que estão a correr no sistema. Depois de os engenheiros de CSS recolherem os dados de desempenho, pode atribuir as páginas de bloqueio na memória diretamente do utilizador à conta de arranque do serviço SQL Server.

Antes de atribuir as páginas de bloqueio no direito do utilizador de memória, certifique-se de capturar um registo do Performance Monitor para determinar os requisitos de memória das várias aplicações e serviços instalados no sistema. Estas aplicações incluem também o SQL Server. Para determinar os requisitos de memória, recolha a seguinte informação de base:

  • Certifica-te de que defines corretamente a opção de memória máxima do servidor e a opção de memória mínima do servidor. Estas opções refletem apenas o requisito de memória do buffer pool do processo do SQL Server. Estas opções não incluem a memória alocada para outros componentes dentro do processo do SQL Server. Estes componentes incluem os seguintes:

    • Os fios de trabalho do SQL Server
    • Várias DLLs e componentes que o processo SQL Server carrega dentro do espaço de endereços do processo SQL Server
    • As operações de backup e restauro
  • As DLLs e componentes incluem vários fornecedores OLE DB, procedimentos armazenados estendidos Microsoft objetos COM que são usados para o procedimento armazenado sp_OACreate, servidores ligados e SQL Server CLR. A memória alocada para estes componentes pertence à região do pool de não-buffer do espaço de endereçamento do processo SQL Server. Para determinar idealmente a quantidade máxima de memória que todo o processo do SQL Server pode usar, deve subtrair a memória alocada para componentes que não utilizam o pool de buffers da memória total que pretende que o processo do SQL Server utilize. Depois, podes usar o valor restante para definir a opção de memória máxima do servidor. Antes de definir a opção de memória máxima do servidor e a opção de memória mínima do servidor, deve rever cuidadosamente o tópico "Definir manualmente as opções de memória" no SQL Server Books Online.

  • Determinar a necessidade de memória de outras aplicações e dos componentes do sistema operativo Windows. As aplicações podem incluir outros componentes do SQL Server, por exemplo, SQL Server Agent, SQL Server Replication Agents, SQL Server Reporting Services, SQL Server Analysis Services, SQL Server Integration Services e SQL Server Full Text Search. Aplicações que realizam operações de backup e cópia de ficheiros podem usar muitas memórias. Considere operações como cópia em massa e o Snapshot Agent que geram IOs de ficheiros. Deve considerar o requisito de memória de todas estas aplicações ao determinar o valor da opção de memória máxima do servidor e da opção de memória mínima do servidor. Pode usar o contador de Bytes Privados e o contador de Conjunto de Trabalho sob o objeto Process para cada processo para determinar a necessidade de memória para um processo específico.

  • Por defeito, o direito de utilizador Bloquear páginas na memória já foi atribuído à conta do Sistema Local incorporada. Para mais informações, visite o seguinte site da Microsoft: Tenho de atribuir o privilégio Lock pages in Memory para o sistema local?

  • Se usar uma conta de utilizador Windows globalmente para todos os processos do SQL Server num domínio, determine os direitos de utilizador atribuídos usando uma configuração de Políticas de Grupo. Um processo SQL Server de 32 bits pode usar esta conta como conta de arranque. No entanto, esta conta exige que o direito de utilizador Bloquear páginas na memória ative a funcionalidade Address Windowing Extensions (AWE). Para mais informações, consulte o tópico "Fornecer a quantidade máxima de memória ao SQL Server" no SQL Server Books Online.

  • Antes de configurar a opção de memória máxima do servidor e a opção de memória mínima para múltiplas instâncias do SQL Server, considere os requisitos de memória do pool sem buffer para cada instância do SQL Server. Depois, configure estas opções para cada instância do SQL Server.

Idealmente, recolhe esta informação base durante os picos de carga. Assim, pode determinar os requisitos de memória para várias aplicações e componentes para suportar a carga máxima. Os requisitos de memória variam de um sistema para outro, dependendo das atividades e das aplicações que estão a correr no sistema. Pode consultar a informação fornecida na vista de gestão dinâmica sys.dm_os_process_memory para perceber se o sistema está a enfrentar condições de baixa memória. Para mais informações, consulte sys.dm_os_process_memory (Transact-SQL).

Melhorias adicionadas no Windows Server 2008 e na versão R2

O Windows Server 2008 e o Windows Server 2008 R2 melhoram o mecanismo de alocação de memória contígua. Esta melhoria permite que o Windows Server 2008 e o Windows Server 2008 R2 reduzam até certo ponto os efeitos de paginar o conjunto de aplicações de trabalho quando chegam novos pedidos de memória.

Segue-se uma explicação das melhorias do whitepaper da Microsoft "Avanços na Gestão de Memória no Windows":

No Windows Server 2008, a alocação de memória fisicamente contígua é muito melhorada. Os pedidos para alocar memória contígua têm muito mais probabilidade de sucesso porque o gestor de memória agora substitui as páginas dinamicamente, normalmente sem cortar o conjunto de trabalho ou realizar operações de E/S. Além disso, muitos mais tipos de páginas — como pilhas de kernel e páginas de metadados do sistema de ficheiros, entre outras — são agora candidatos à substituição. Consequentemente, há geralmente mais memória contígua disponível em qualquer momento. Além disso, o custo para obter tais alocações é muito reduzido.

Para mais informações, consulte Problemas de Trim do Conjunto de Trabalho do SQL Server.

Os produtos de terceiros abordados neste artigo são fabricados por empresas independentes da Microsoft. A Microsoft não oferece nenhuma garantia, implícita ou não, sobre o desempenho ou a confiabilidade desses produtos.