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.