Compartilhar via


MSSQLSERVER_855

Aplica-se a: SQL Server

Detalhes

Atributo Valor
Nome do produto SQL Server
ID do evento 855
Origem do Evento MSSQLSERVER
Componente SQLEngine
Nome simbólico BAD_MEMORY_OUTSIDE_BPOOL
Texto da mensagem Foi detectada uma corrupção de memória de hardware incorrigível. O sistema pode se tornar instável. Verifique o log de eventos do Windows para obter mais detalhes

Explicação

Essa mensagem indica que o SQL Server detectou uma página de memória inválida em um objeto armazenado em cache fora do pool de buffers. Ela é gerada em sistemas que dão suporte à capacidade de recuperação de erros de memória. O SQL Server não consegue se recuperar desses cenários e registra essa mensagem.

Ação do usuário

Você deve executar verificações de hardware ou do sistema para determinar se há problemas de memória ou de CPU. Verifique se todas as atualizações do sistema operacional e de hardware, bem como todos os drivers do sistema, foram aplicados ao sistema. Considere a possibilidade de executar diagnósticos de fabricação de hardware, incluindo testes relacionados à memória. Sempre que você receber esse erro, considere a possibilidade de executar o DBCC CHECKDB em todos os bancos de dados dessa instância.

Mais informações

Em computadores com um hardware mais recente e que executem o Windows Server 2012 ou uma versão posterior, o hardware pode notificar o sistema operacional e os aplicativos de que as páginas de memória (páginas do sistema operacional) estão marcadas como inválidas ou danificadas. Aplicativos como o SQL Server podem registrar essas notificações de página de memória inválida usando o seguinte conjunto de APIs:

  • GetMemoryErrorHandlingCapabilities
  • RegisterBadMemoryNotification
  • BadMemoryCallbackRoutine

O SQL Server adiciona suporte para essas notificações no Microsoft SQL Server 2012 (11.x) e versões posteriores. Durante a inicialização do SQL Server, o SQL Server verifica se o hardware dá suporte a esse novo recurso. Além disso, você receberá a seguinte mensagem no log de erros:

<O Datetime> Server Machine oferece suporte à recuperação de erros de memória. A proteção de memória do SQL está habilitada para a recuperação de corrupção de memória.

Atualmente, apenas o pool de buffers executa uma ação quando o SQL Server recebe essas notificações. Quando recebe uma notificação, o SQL Server precisa iterar por todo o pool de buffers e descobrir o endereço de cada buffer alocado. Em seguida, o SQL Server usa a QueryWorkingSetEX API para verificar se alguma das páginas de memória que dão suporte à página de dados está marcada como inválida. A estrutura de saída PSAPI_WORKING_SET_EX_BLOCK que corresponde a essa página de memória terá o membro inválido definido como 1 se houver algum dano relatado.

Se esse pool de buffers ou página de dados não estiver alterado no momento ou não estiver processando E/S, o SQL Server poderá descartar e desconfirmar a página de dados. Em seguida, o SQL Server registra a seguinte mensagem:

O SQL Server detectou corrupção de memória de hardware no banco de dados '%ls', ID do arquivo: %u, ID da página; %u, endereço de memória: 0x%I64x e recuperou a página com êxito.

Quando as consultas exigirem essa página de dados novamente, o pool de buffers poderá ler a página de dados do disco e levar o conteúdo mais uma vez para o pool de buffers. Também é possível que a versão em disco da página esteja em um estado danificado. Nesse caso, o SQL Server pode registrar erros adicionais, como o erro 824.

Se a página inválida não for usada pelo pool de buffers, mas por algum outro objeto ou estrutura armazenada em cache, o SQL Server registrará a seguinte mensagem:

Foi detectada uma corrupção de memória de hardware incorrigível. O sistema pode se tornar instável. Verifique o log de eventos do Windows para obter mais detalhes.

Se o servidor estiver relatando erros de memória, você deverá entrar em contato com o fornecedor do hardware do computador e executar as ações apropriadas, como executar o diagnóstico de memória, atualizar o BIOS e o firmware e substituir os módulos de memória inválidos.

Você pode usar o sinalizador de rastreamento 849 do SQL Server para impedir que o SQL Server se registre no sistema operacional para notificações de erro de memória. No entanto, lembre-se de que habilitar o sinalizador de rastreamento 849 impedirá que o SQL Server receba notificações de memória incorreta do sistema operacional. Portanto, não recomendamos que você use esse sinalizador de rastreamento em circunstâncias típicas.

Além disso, lembre-se de que, por padrão, o SQL Server receberá essas notificações no hardware com suporte.

Você também deve estar ciente de que, quando o SQL Server se registra para essas notificações de erro de memória, o processo do sistema de gravador lento não executa verificações de página constantes. Para obter mais informações sobre verificações de páginas constantes, confira Como solucionar a Mensagem 832 (página constante alterada) no SQL Server.