Freigeben über


Logs Circulares

Semana passada alguém me perguntou sobre esse “Ring Buffer”. É incrível a coincidência de que sempre que falo sobre memória, alguém comenta sobre esse recurso. Esse assunto sempre volta a tona, eu mesmo já escrevi um post sobre Ring Buffer e agora estou escrevendo novamente.

O que é um Ring Buffer?
A tradução literal é um log circular.

Esse é um componente base disponibilizado pelo SQLOS para os demais componentes do SQL Server. Qualquer funcionalidade pode registrar uma informação no log circular. Essas informações ficam em memória e são perdidas em caso de restart do serviço.

Como posso enxergar os logs?

Utilize a DMV sys.dm_os_ring_buffers para observar todas as entradas. Nesse caso, temos 3140 registros cadastrados.

image

Quantos logs circulares existem?

Existe uma única DMV chamada sys.dm_os_ring_buffers (note que “buffers” está no plural), que representa vários logs circulares. Para identificar todos os diferentes logs circulares, podemos usar o campo “ring_buffer_type”:

image

Embora a DMV represente a união de todos os registros, cada tipo (ring_buffer_type) representa um “log circular físico”. É semelhante a uma view, que referencia a várias tabelas.

Como ler as informações?

Os dados ficam armazenados na coluna record, enquanto que a hora é registrada em timestamp.

image

Podemos transformar o campo record em tipo XML, facilitando o uso de XQuery para as consultas.

image

Em relação ao timestamp, é preciso fazer uma mágica para apresentar o formato de data/hora.

SELECT
    DATEADD (ms,
[timestamp] - (SELECT ms_ticks FROM sys.dm_os_sys_info),
GETDATE()) AS timestamp

FROM sys.dm_os_ring_buffers order by timestamp desc

image

Conclusão

A análise dos logs circulares é bem interessante e permite identificar uma série de comportamentos do SQL Server. Embora esses logs já existam nativamente, é possível criar logs customizados usando XEvents. A partir daí que temos grandes poderes para compreender como funciona as minúcias do SQL Server.

Comments

  • Anonymous
    March 25, 2014
    Oi Catae, Duas dúvidas: 1 - Os Ring Buffers tem algum tamanho pré-definido, que restrinja a quantidade de entradas nele? Por exemplo, em um dos nossos servidores para RING_BUFFER_RESOURCE_MONITOR tenho 1024 entradas, já para RING_BUFFER_SCHEDULER tenho 182669 entradas. 2 - Há alguma razão para esta DMV não ser documentada? Abraço, Erickson Ricci

  • Anonymous
    March 25, 2014
    Fala Erickson, Ótimas perguntas, vou me esforçar a responder porque não sei direito... A estrutura de Ring Buffer foi definida pelo time do SQLOS e disponibilizada para todos os demais desenvolvedores do SQL Engine. Por padrão, os logs possuem o limite de 100 registro... Entretanto, geralmente esse valor é sobrescrito pelo dono do componente. <modo_chute>Acredito que o desenvolvedor do Resource Monitor criou um log de 1024, enquanto que o desenvolvedor do Scheduler utilizou 1 log circular por scheduler. Não sei, isso tudo não é documentado e não dá para falar muita coisa </modo_chute>. O conteúdo da informação e o formato XML também podem mudar ao longo das versões, service packs, hotfixes, ou seja, a qualquer momento. Acredito que esse é o motivo de manter a DMV não-documentada: dar flexibilidade aos desenvolvedores do SQL Engine para formatar o log da forma que eles quiserem. Transformá-la em documentada significa 1) adicionar a documentação, 2) incluir testes para validar a saída, 3) engessar o schema do XML para que não haja mudanças. O mecanismo de XEvent é um componente escrito do zero e que substitui a DMV de forma documentada. Abraços, Fabricio

  • Anonymous
    May 05, 2014
    Catae, eu como DBA ao utilizar uma DMV não documentada estou exposto á algum problema? Ou o fato dela não ser documentada traz apenas problemas de entendimento da informação, visto que o mesmo não está documentado? (To falando isso como se a não documentação fosse ao pé da letra). Da mesma forma que o comando DBCC LOGINFO é não documentado, porém sei que posso utilizar o mesmo para verificar os arquivos de Log fragmentados. Eu coloco meu ambiente em risco por usar esses comandos?

  • Anonymous
    May 06, 2014
    Olá Leonardo, Boa pergunta! Essa é uma view considerada "não-suportada", ou seja, não tem praticamente nenhuma documentação da Microsoft e não há garantia de backward compatibility. technet.microsoft.com/.../ms176083.aspx Isso significa que as colunas podem mudar, assim como o schema do XML pode ter grandes variações entre versões (e inclusive entre diferentes Service Packs). Portanto, isso é um alerta para os fabricantes de ferramentas, que não dependam dessa DMV. Para os DBA's, não tem problema nenhum! O exemplo do DBCC LOGINFO é excelente. Abraços, Fabricio

  • Anonymous
    May 13, 2014
    Entendi Catae, então o fato dela não ser documentada não faz com que seja um perigo caso eu venha utiliza-la no meu ambiente, e sim que as coisas podem mudar e se tiver alguma rotina que depende de tais informações, as mesmas podem estar inconsistentes. Muito obrigado novamente.

  • Anonymous
    May 15, 2014
    Confere 100%.