Este artigo tem por objetivo demonstrar os recursos da Trace API, que foram introduzidos no Firebird 2.5. Será apresentado um exemplo prático em Delphi que monitora o BD.
Para que serve
Serve para monitorar o que está acontecendo em tempo real no banco de dados. Desta forma consegue-se ver comandos e situações que ocorrem na base de dados, e assim, conseguir detectar problemas e tentar corrigi-los.
Em que situação o tema é útil
Este tema é útil para fazermos auditorias na base de dados. É mais uma ferramenta disponível para que possamos aperfeiçoar cada vez mais nossos softwares. Neste artigo iremos apresentar alguns comandos SQL e algumas transações e ver como essa API pode nos ajudar a entender o que acontece no Banco de Dados.
Trace API
O Firebird tem evoluído cada vez mais. Em sua versão 2.1 foram introduzidas as tabelas de monitoramento e agora em sua versão 2.5 uma nova API foi introduzida: a Trace API. Essas são ferramentas de diagnóstico que permitem ao desenvolvedor/DBA prever problemas em bases de dados, e assim garantir o bom funcionamento de sistemas que as utilizem. Este artigo se destina a explorar as novidades trazidas pela Trace API. Um aplicativo será criado para ilustrar sua utilização e obtenção de resultados.
Em um banco de dados ocorrem diversas situações por baixo de simples comandos DML e também DDL que não somos capazes de observar. Por exemplo, quando se digita um simples select * from <tabela>, o banco de dados tem que se encarregar de recuperar quais são as colunas da tabela para aí sim poder trazer o resultado. Isso acontece porque no comando Select foi especificado o caractere *. Parece uma bobeira, mas quando se usa sistemas que fazem uso de meios de comunicação como a internet, os dados estão sujeitos à velocidade da banda e quanto mais dados consegue-se economizar maior ficará a velocidade com que se irá obter uma determinada informação. No entanto, para conseguir otimizar o tempo de acesso para estas informações, tem-se que ter ferramentas que mostram os dados conforme eles vão acontecendo e é neste ponto que entra uma novidade do banco de dados Firebird 2.5, a Trace API.
A Trace API surgiu, porém foi pouco explorada. Com ela é possível monitorar e auditar um banco de dados conforme eventos ocorrem. Ainda nessa versão ela é um plug-in do banco de dados e roda do lado do servidor. As bibliotecas responsáveis por fazer essa auditória são a fbtrace.dll no Windows e fbtrace.so no Linux e sistemas Posix. Existem algumas ferramentas no mercado também que fazem uso dessa nova funcionalidade, inclusive ferramentas brasileiras.
Um ponto importante a destacar, é que a Trace API diferencia-se das tabelas de monitoramento que o Firebird traz juntamente com o banco de dados desde a versão 2.1. A principal diferença entre elas, é que a Trace API funciona como se fosse um log sequencial dos dados, desta forma ela registra a sequência dos eventos em sua ordem cronológica enquanto que as tabelas de monitoramento funcionam como uma fotocópia dos dados que estão ocorrendo no banco, como por exemplo: quais transações estão abertas, quais são os usuários, qual o caminho do banco de dados, page size definido na base de dados etc.
As tabelas de monitoramento do Firebird foram uma das novidades que surgiram na versão 2.1 do Firebird. Vale destacar que estas tabelas fazem o monitoramento do que está acontecendo na base de dados. É bastante útil em casos onde é preciso avaliar o que uma determinada base de dados está executando, e para isso basta que seja executado um simples comando SELECT em uma das tabelas de monitoramento para se saber o que está se passando naquele momento no banco de dados. As tabelas existentes são:
MON$DATABASE: É utilizada para verificar quais são as base de dados que estão sendo usadas naquele momento, e também para mostrar algumas informações tais como caminho da base de dados, tamanho do page_size, próxima transação, transação atual em aberto, tipo do dialeto que a base foi criada, dentre algumas outras informações relativas a base de dados.
MON$ATTACHMENTS: Esta tabela diz respeito às conexões que estão conectadas no Sistema Gerenciador de Banco de dados. Algumas informações pertinentes a esta tabela dizem respeito ao ID do processo no sistema operacional, o status da conexão se está em espera ou executando, o usuário que está conectado nesta seção, qual o protocolo que está sendo usado para manter esta conexão, o endereço da máquina que está com a conexão em aberto, etc.
MON$TRANSACTIONS: É utilizada para verificar o estado das transações abertas em uma determinada base de dados, algumas informações que são possíveis resgatar nesta tabela são o tipo de isolamento da transação, se ela está ativa ou em espera, se ela está em lock ou não. Um ponto importante a destacar é que esta tabela está vinculada a uma determinada conexão, podendo saber em específico quais são as transações ativas de uma determinada conexão.
...