🔥 fbtrace

Sobre o trace do Firebird

O que Ă©, quanto custa coletar, quanto dado gera e como ler o relatĂłrio.

🔍O que é o Trace API

O Trace API, disponível desde o Firebird 2.5, é o mecanismo nativo de observação do servidor: uma sessão de trace assina eventos (conexões, transações, prepare e execução de statements, erros) e os recebe como texto, com o SQL completo, o plano de execução escolhido pelo otimizador e as estatísticas reais de cada execução — tempo, registros retornados e contadores de leitura/escrita por tabela.

Existem dois sabores: a sessão interativa (iniciada com fbtracemgr, morre quando você a encerra ou desconecta — é a que a página Gerar trace monta) e o audit trace (configurado no fbtrace.conf do servidor, permanente). Para diagnóstico pontual, use sempre a interativa: começa e termina sob seu controle, sem tocar na configuração do servidor.

⚖️Custo de coletar (impacto no servidor)

Trace não é de graça, mas o custo é menor do que parece — e controlável:

Regra prática: para diagnosticar um problema, rode uma sessão interativa filtrada por banco, com tudo ligado, pelo tempo necessário para capturar o comportamento (minutos a poucas horas) — e encerre. Não deixe sessão de trace "esquecida" rodando por dias.

📦Volume de dados

đź”’Cuidado com dados sensĂ­veis

O log de trace contém o SQL completo e os valores dos parâmetros — nomes, CNPJs, valores financeiros. Trate o arquivo como dado de produção: transporte com cuidado, apague quando terminar, e aqui no serviço prefira o modo volátil (nada fica armazenado) ou o link com expiração.

🧭Limitações que valem saber

📖Glossário das métricas do relatório

MétricaO que significa
Leitura sequencialRegistro lido varrendo a tabela inteira (acesso "natural", sem índice). Alto volume aqui = full scan — o principal sinal de índice faltando.
Leitura indexadaRegistro localizado via índice. É o acesso barato; a coluna "% seq." mostra a proporção entre os dois.
FetchesOperações internas de acesso a páginas/registros no cache — a medida mais fiel de trabalho do servidor. "Fetch/reg" alto significa muito esforço para cada registro entregue.
MarksModificações de página (escritas) — relevante em INSERT/UPDATE/DELETE e nos efeitos de triggers.
Plano de execuçãoA estratégia do otimizador (índices, joins, ordenações). Queries diferentes com o mesmo plano são "parentes" — a aba Planos as agrupa.
PrepareCompilação do SQL e escolha do plano. Aplicações que re-preparam o mesmo statement a cada execução desperdiçam leituras nas tabelas de sistema (RDB$) — visível na aba Tabelas.
Registros retornadosLinhas efetivamente entregues ao cliente ("records fetched" no log).
Padrões de acessoNo detalhe de uma query: execuções agrupadas pela mesma "pegada" de tabelas/operações — revela efeito de triggers e validações de FK sem precisar olhar execução por execução.

đź’šApoie o projeto

O fbtrace é desenvolvido e mantido de forma independente. Se a ferramenta te ajudou a encontrar aquele índice que faltava, considere apoiar o desenvolvimento ❤.

Pronto para começar? Gere a configuração de trace e depois envie o log para análise.