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 uma corrupção de memória de hardware no banco de dados '%ls', ID de arquivo: %u, ID de 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 estão modificadas e registra em log 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áginas de memória inválidas 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 dá suporte à recuperação de erro de memória. A proteção de memória do SQL está habilitada para a recuperação de corrupção de memória.

Atualmente, somente o pool de buffers executa uma ação quando o SQL Server recebe essas notificações. Quando ele recebe uma notificação, o SQL Server precisa iterar em todo o pool de buffers e descobrir o endereço de cada buffer alocado. Em seguida, o SQL Server usa a API QueryWorkingSetEX para verificar se as páginas de memória que dão suporte à página de dados estão marcadas como inválidas. 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 essa página de dados ou esse pool de buffers não estiver alterado no momento ou não estiver processando a E/S, o SQL Server poderá descartar e cancelar a confirmação da página de dados. Em seguida, o SQL Server registrará em log a seguinte mensagem:

O SQL Server detectou uma corrupção de memória de hardware no banco de dados '%ls', ID de arquivo: %u, ID de 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 poderá registrar em log erros adicionais, como o erro 824.

Se a página inválida for usada não pelo pool de buffers, mas por outra estrutura ou outro objeto armazenado em cache, o SQL Server registrará em log 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.

Use o sinalizador de rastreamento 849 do SQL Server para impedir que o SQL Server se registre no sistema operacional para receber notificações de erros de memória. No entanto, lembre-se de que a habilitação o sinalizador de rastreamento 849 impedirá o SQL Server de receber notificações de memória inválida 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 em um hardware compatível.

Esteja ciente também de que, quando o SQL Server se registra para receber essas notificações de erros de memória, o processo do sistema de gravador lento não executa verificações de páginas 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.