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.
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”:
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.
Podemos transformar o campo record em tipo XML, facilitando o uso de XQuery para as consultas.
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 timestampFROM sys.dm_os_ring_buffers order by timestamp desc
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.