Pessoal, no SQL Server 2012 temos uma nova feature bem legal que até então foi muito pouco divulgada, trata-se da recuperação (automática!) de erros de memória.
Antes de falar da feature em sim, temos que entender que existem dois tipos de erro de memória, o soft e o hard. O erro do tipo soft normalmente é causado por alguma falha na transmissão ou armazenamento de um dado, sem ter nenhuma causa grave. Já o erro do tipo hard é causado por uma falha em algum componente físico do computador e costuma ser mais crítico.
Alguns erros de memória já são corrigidos automaticamente por recursos como o ECC, mas outros precisam ser tratados pelas aplicações que estão utilizando aquele dado.
Caso seu hardware suporte um recurso chamado “memory scrubbing“, ele enviará uma notificação para a aplicação, no caso o SQL Server 2012, e este tentará tratar o erro.
Pelo menos por enquanto, o SQL Server só consegue recuperar o erro de memória se a página afetada seja uma página “clean”, ou melhor, não seja uma dirty page, e a recuperação é feita lendo os dados novamente do disco. Nos outros casos o SQL Server receberá a notificação e irá apenas registrá-la.
Para saber se seu ambiente suporta o recurso de recuperação de erros de memória e se algum erro foi detectado/corrigido você pode consultar o error log do SQL Server.
Caso seu ambiente seja compatível com o recurso você verá a mensagem:
“Machine supports memory error recovery. SQL memory protection is enabled to recover from memory corruption.“
Já quando um erro for detectado e corrigido a mensagem será:
“SQL Server has detected hardware memory corruption in database ‘%ls’, file ID: %u, page ID; %u, memory address: 0x%x and has successfully recovered the page.“.
Por fim, se um erro for detectado e não puder ser recuperado, a mensagem será:
“Uncorrectable hardware memory corruption detected. Your system may become unstable. Please check the Windows event log for more details.“
Outras formas de monitorar esses erros são através de XEvents e também de uma nova procedure para monitoramento do ambiente do SQL Server 2012, mas isso fica para um outro post!
Pingback: Melhorias no SQL Server 2012 « Alex Souza
Pingback: Funcionamento da Memória no SQL Server « Alex Souza
Pingback: Recuperação de erros de Memória no SQL Server 2012 – Parte 2 | Vladimir M. B. Magalhães – Learn and Share