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:
- SĂł o que passa pelos filtros gera trabalho. Uma sessĂŁo filtrada por um banco especĂfico nĂŁo custa quase nada para os demais. Por isso a primeira regra Ă© sempre filtrar por banco.
- O caro Ă© formatar e transmitir eventos, nĂŁo observá-los: cada execução logada vira dezenas de linhas de texto (SQL + plano + contadores). Em bancos com milhares de statements por segundo, o overhead tĂpico fica na casa de poucos por cento — mas o volume de log cresce rápido (veja abaixo).
time_thresholdĂ© o principal botĂŁo de custo. Com0(o que o gerador usa), toda execução Ă© logada — ideal para análise completa, pois sem as execuções rápidas os totais mentem. Para monitoramento contĂnuo de produção, suba para100ms ou mais e capture sĂł as lentas.explain_planeprint_perfadicionam custo pequeno por statement, mas sĂŁo exatamente os dados que tornam a análise Ăştil — nĂŁo desligue.
📦Volume de dados
- Cada execução logada gera de ~15 a 60 linhas de texto (SQL repetido no start/finish, plano, parâmetros, contadores). Um sistema de médio movimento (aplicações fazendo polling, dezenas de execuções por segundo) produz facilmente dezenas de MB por hora — logs de centenas de MB em um dia são normais.
- Texto de trace comprime ~10Ă— (Ă© extremamente repetitivo). Comprima antes de
enviar para análise:
gzip trace.log— o upload aceita .gz e .zip. max_sql_lengthcontrola o corte do SQL no log. Muito baixo trunca queries grandes (e quebra o agrupamento por query na análise); o gerador usa65535, que praticamente elimina truncamento. Se o volume for problema em sessões longas, reduza para 4096 sabendo do trade-off.- Os filtros
include_filter/exclude_filterreduzem volume na origem — ex.: ignorar as queries de metadados (RDB$) que ferramentas gráficas disparam aos montes.
đź”’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
- Não há filtro por usuário ou aplicação na captura (pedido em aberto no projeto Firebird). Capture o banco inteiro e segmente nas abas Usuários e Aplicações do relatório.
- O trace registra o que aconteceu durante a sessĂŁo — uma query problemática que nĂŁo rodou no perĂodo nĂŁo aparece. Para visĂŁo completa, capture uma janela representativa (ex.: o horário de pico).
- A resolução de tempo é de 1 ms: execuções rápidas aparecem como "0 ms". Por isso o relatório calcula vazões (fetch/s, reg/s) sobre o tempo somado do grupo, e as omite quando o total é 0.
📖Glossário das métricas do relatório
| Métrica | O que significa |
|---|---|
| Leitura sequencial | Registro lido varrendo a tabela inteira (acesso "natural", sem Ăndice). Alto volume aqui = full scan — o principal sinal de Ăndice faltando. |
| Leitura indexada | Registro localizado via Ăndice. É o acesso barato; a coluna "% seq." mostra a proporção entre os dois. |
| Fetches | Operaçõ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. |
| Marks | Modificações de página (escritas) — relevante em INSERT/UPDATE/DELETE e nos efeitos de triggers. |
| Plano de execução | A estratĂ©gia do otimizador (Ăndices, joins, ordenações). Queries diferentes com o mesmo plano sĂŁo "parentes" — a aba Planos as agrupa. |
| Prepare | Compilaçã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 retornados | Linhas efetivamente entregues ao cliente ("records fetched" no log). |
| Padrões de acesso | No 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 ❤.