MSSQLSERVER_856

Aplica-se a: SQL Server

Detalhes

Atributo Valor
Nome do produto SQL Server
ID do evento 856
Origem do Evento MSSQLSERVER
Componente SQLEngine
Nome simbólico BAD_MEMORY_CLEAN_DATABASE_PAGE
Texto da 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

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 corrige esses erros de memória descartando as páginas de memória corrompidas que não são modificadas e registra essa mensagem de erro. Se a página de memória corrompida tiver sido modificada (suja), o erro 824 será gerado (MSSQLSERVER_824)

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.