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 (6)

  1. Erickson Ricci disse:

    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

  2. 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

  3. Leonardo Pedroso disse:

    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?

  4. 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

  5. Leonardo Pedroso Costa disse:

    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.

Skip to main content