Recuperação de erros de Memória no SQL Server 2012 – Parte 2

No post anterior falei sobre o funcionamento do recurso de recuperação de erros de memória no SQL Server 2012 e disse que a ocorrência de erros (recuperáveis ou não) de memória poderiam ser detectados através de XEvents ou através da procedure “sp_server_diagnostics“, e é exatamente isso que irei demonstrar no post de hoje.

Através da procedure sp_server_diagnostics, da qual irei falar em mais detalhes em um post futuro, você pode analisar uma série de informações do seu servidor. A sintaxe básica que você pode executar é a seguinte:

USE MASTER;
GO

EXEC SP_SERVER_DIAGNOSTICS;
GO

obs: a procedure tem um parâmetro opcional chamado @repeat_interval, cujo valor é em segundos. Caso você não informe o mesmo a procedure irá executar uma única vez e trará os valores do seu sistema após 5 segundos da execução. Caso você forneça algum valor, que deve ser maior ou igual a 5, ele irá retornar os valores do seu ambiente no momento da execução e a cada 5 segundos, até que você pare a execução.

Após a execução será apresentado um resultado parecido com esse:

sp_server_diagnostics

Veja que temos no resultados 5 linhas, cada uma para um “component_name” diferente. Nesse momento o componente que nos interessa é o “system”, que nos fornece informações sobre CPU, memória, etc.

Ao expandir a coluna “data”, veremos várias informações, sendo as últimas:

BadPagesDetected=”0″
BadPagesFixed=”0″
LastBadPageAddress=”0x0″

onde “BadPagesDetected” se refere ao número de páginas com erro detectadas, “BadPagesFixed” ao número de páginas detectadas e que foram corrigidas, e “LastBadPageAddress” o endereço de memória da última página com erro detectada.

Essa informação pode não nos fornecer muitos detalhes, mas dá uma visão geral bem interessante e serve como um ótimo ponto de partida no caso de termos algum problema de corrupção de memória.

Já utilizando XEvents poderiamos trabalhar da seguinte forma. Primeiro devemos criar uma sessão e adicionar o evento que capture os dados que nos interessam, relativos aos erros de memória.

CREATE EVENT SESSION [diagnostico]
ON SERVER
ADD EVENT [sp_server_diagnostics_component_result] (set collect_data=1)
ADD TARGET package0.event_file
(SET filename=N’C:\diagostico.xel’)
GO

ALTER EVENT SESSION [diagnostico] ON SERVER STATE = start
GO

No caso o evento acima já faz parte da sessão padrão do sistema “system_health”, mas como ela aplica um filtro que ainda não pude validar se irá atrapalhar em algo os resultados para essa análise e até para fins didáticos, prefiro criar uma sessão a parte.

Para analisar os dados capturados devemos executar o seguinte comando:

SELECT OBJECT_NAME as event,CONVERT(xml, event_data) as xml_data
FROM sys.fn_xe_file_target_read_file
(‘C:\xevents\diagnostico*.xel’, NULL, NULL, NULL)

E analisar os dados da coluna xml_data referentes as “bad pages”.

obs: se eu conseguir um equipamento com suporte a esse recurso vou tentar melhorar o exemplo aqui apresentado posteriormente.

Leitura recomendada:

Esse post foi publicado em Artigos, Virtual PASS BR, XEvents. Bookmark o link permanente.

Uma resposta para Recuperação de erros de Memória no SQL Server 2012 – Parte 2

  1. Pingback: Melhorias no SQL Server 2012 « Alex Souza

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s