FBScanner

FBScanner is a part of HQbird Standard now!

FBScanner (Firebird Scanner) é uma ferramenta para resolver todos os tipos de problemas de performance com o Firebird.

Documentação

Módulos do FBScanner

FBScanner é uma das mais complexas ferramentas da IBSurgeon, ele possui diversos módulos para cobrir todas as técnicas e métodos para otimização. Desenvolvedores e administradores podem escolher o módulo mais conveniente ou sua combinação

  1. LogAnalyzer - ferramenta para análise detalhada de sentenças SQL, planos de execução, transações e conexões, suportando todas as versões do Firebird e InterBase.
  2. FBScanner Viewer - visualizador em tempo real, mostra conexões, queries e transações que passam pelo Serviço do FBScanner, suportando todas as versões do Firebird e InterBase.
  3. MON$Logger - ferramenta para analisar as tabelas de monitoramento (MON$) no Firebird 2.1 e 2.5
  4. TraceAPI Plugin - Plug-in nativo (Windows x32, x64, Linux x32, x64) para monitoramento através da TraceAPI, com a possibilidade de armazenar o log em uma base de dados Firebird, suporta Firebird 2.5.2.

As funcionalidades mais interessantes do FBScanner são:

  • Logging das queries SQL, conexões e transações com todos os parâmetros para análise detalhada (para uma ou diversas estações de trabalho), para que encontre gargalos de performance no Firebird (ALL versions) and InterBase (TODAS as versões).
  • Analise das tabelas de monitoramento (MON$) no Firebird 2.1 e 2.5
  • Monitoramento em tempo real das conexões. O FBScanner Viewer mostra todas as conexões para uma base de dados selecionado: o IP/nome DNS do cliente, base de dados e tempo de conexão.
  • Monitoramento em tempo real das queries SQL. Para cada conexão o FBScanner mostra todas as queries SQL em execução juntamente com seus parâmetros de transação.
  • Detecção da conexão mais antiga e da transação ativa mais antiga para permitir que analise a possibilidade de não ter um controle transacional adequado, ou projeto incorredo de controle transacional ou mostrar aos usuários que estão usando a aplicação de uma forma que prejudica a performance.
  • Desconexão de clientes (erros 10054). Verificar se as desconexões estão sendo feitas de forma correta e também poderá utilizar este software para desconectar os usuários no caso de manutenção ou atualização da base de dados.
  • FBScanner permite o roteamento de aplicações ou usuários específicos permitindo desta forma que uma análise mais fina seja feita sobre esta aplicação ou usuário.
  • Importante ! O FBScanner é a única ferramenta para analisar queries SQL em bases de dados Firebird e InterBase de produção em versões anteriores ao Firebird 2.1, especialmente se a aplicação foi desenvolvida por terceiros e o código fonte não está disponível.

     

Tour Rápido

Como o FBScanner ajuda a identificar e resolver problemas de performance no Firebird ou InterBase ? Vamos visualizar rapidamente as fucnionalidades mais interessantes do FBScanner, começando pelo módulo LogAnalyzer.

Passo  1: LogAnalyzer "Carga do servidor"

FBScanner Log Analyzer

Faça o download da versão demo do FBScanner e instale. Rode o "FBScanner Service Settings" pelo menu Iniciar, então clique em "Advanced options", aba  "SQL Log ".

Crie uma base de dados para o log (deverá estar em uma outra instância do Firebird neste mesmo computador ou em outro - por favor, olhe em "FBScanner User Guide", páginas 14-16 para detalhes). Depois disso, todo o tráfego SQL que pasar pelo FBScanner será armazenado na base de dados de log.

Rode o "FBScanner Log Analyzer " e conecte-se a base de dados de log. Na primeira aba, "servidor load" (carga do servidor), você poderá visualizar as conexões e sentenças SQL. É fácil de identificar picos de carga e determinar os momentos onde a performance foi ruim.

Você pode dar zoom e fazer scroll pelo gráfico de performance, ligar e desligar a visualização de parâmetros - para que identifique o momento que o problema inicia. Depois disso clique com o botão da direita no ponto onde deseja obter mais detalhes e escolha "Go to the SQL list on HH:mm" (Vá para a lista de SQL's em HH:mm).

 

Passo 2: SQL Log no LogAnalyzer

FBScanner Log Analyzer

Se você selecionou a aba "All Statements" (Todas as Sentenças), será mostrada a lista de todas as queries SQL. Por favor, note que estão queries SQL de todas as conexões que são logadas pelo FBScanner (é possível configurar o FBScanner para monitorar apenas uma conexão ou um grupo de computadores ou aplicação específica - tudo o que você precisa é usar strings de conexão apropriadas e/ou portas de conexão - por favor leia sobre isso no "Guia de Usuário do FBScanner").

Você pode afunilar sua busca - defina o momento de início e fim e então queries em EXECUTION_TIME para que veja as queries com tempo de execução mais longo.

Para cada query você pode ver o texto da query SQL, seus parâmetros, tempo de início/fim, quantidade de registros buscados, e tamb;em saber quem e quando a executou: endereço IP, nome do usuário, etc. 

Você pode também fazer com que o FBScanner faça o log dos planos de execução das queries SQL, para isso você precisa marcar corretamente a opção em "FBScanner Service Settings" (Configurações do Serviço do FBScanner).

Quando você tiver identificado a query que tem problemas, você poderá ver qual conexão e transação ela pertence: para isso clique com o botão da direita e escolha "View connection and transactions for statement ID=..."(Veja conexão e transação para a sentença ID=...) .Isto te levará a aba "All connections and Logs" (Todas a conexões e Logs).

Passo 3: Conexões e Transações

FBScanner Log Analyzer

A aba "All connections and Logs" (Todas as conexões e Logs) contém a lista de todas a conexões e suas transações e sentenças relacionadas na forma mestre-detalhe.

Quando você clica na Query SQL no grid abaixo, todas as sentenças que pertencem a mesma transação serão marcadas em negrito. Isto lhe permite entender o fluxo real da transação. Também, existem parâmetros da transação (parâmetros vazios da transação significa que esta transação tem os parâmetros default "wait, write, snapshot").

Também, o  FBScanner LogAnalyzer permite que rode a query selecionada contra um outra versão da base de dados e compare a sua performance. Ele tamb;em permite que se execute SQL's em massa, o que pode ser útil no caso de migração entre versões do Firebird.

Importante ! A verão Demo do FBScanner armazena algumas queries com o texto "Demo", e fucniona somente por 7 days. A versão compelta não tem estes tipos de restrições.

 

Passo 4: FBScanner Viewer (Visualizador do FBScanner)

FBScanner Log Analyzer

O FBScanner Viewer é a parte do FBScanner que é responsável pelo monitoramento em tempo real das coenxões, queries e transações. O FBScanner Viewer conecta-se diretaemnte ao serviço do FBScannere busca as informações do tráfego SQL.
O FBScanner Viewer pode ser executado em outra máquina na rede local: ele se conecta através da porta 30100 por padrão e busca os dados de forma on-line do serviço do FBScanner.
Porpadrão o FBScanner Viewer atualiza o seu status a cada 0.5 segundos, e é possível ver as últimas 20 queries mais recentes da conexão.
Para conexões lentas (Internet) o FBScanner Viewer pode ser configurado para atualizar os dados a cada 5 segundos, por exemplo.

O FBScanner Viewer pode ser usado para gerenciamento das conexões: ele pode desconectar usuários (apenas os selecionados, todos, por máscara) como simulação de erros de desconexão 10054, e suporta a funcionalidade de white/black list.

 

Passo 5: MON$Logger

FBScanner MON$Logger

O MON$Logger é a ferramenta que analisa as tableas de monitoramento (MON$) no Firebird 2.1 e 2.5. O MON$Logger conecta a base de dados e faz fotografias das tabelas de monitoramento para análise detalhada futura. Series destas fotografias da a possibilidade de identificar queries com consumo excessivo de I/O a queries não otimizadas. No MON$ Logger é fácil para encontrar queries ruins e determinar qual estação de trabalho a executou.

Também, o MON$Logger permite visualizar a lista de transações ativas e determinar qual a Oldest Active Transaction (Transação Ativa mais Antiga), bem como determinar sua origem - aplicação e/ou computador (Endereço IP) que mantém a transação ativa mais antiga aberta.

Dicas para uma otimização de sucesso

Importante ! É recomendável que inicie a investigação de problemas de performance com o MON$Logger: faça várias fotografias da base de dados durante o momento de carga alta (quando os usuários experienciam as piores lentidões), e tente identificar qual processo de negócios que consume a maior parte do I/O (atenção a queries com valores altos para READ_SEQ_READS (leituras sequenciais) e RECORD_IDX_READS (leituras indexadas)).

Então instale o Serviço do FBScanner nestas estações (ou use um servidor dedicado) e log todas as queries da estação de trabalho suspeita: analise os tempos de EXECUCÃO (EXECUTE) e PREPARO (PREPARE), verifique os planos de execução SQL, etc. Encontre e arrume o problema, então verifique se a nova versão roda mais rapidamente que a anterior !

Use o FBScanner Viewer para visualizar em tempo real a execução das queries no servidor (esta funcionalidade é também muito útil para debugar SQLs complexos).

Descrição do FBScanner

O FBScanner é uma poderosa ferramenta para administradores e desenvolvedores Firebird e InterBase, projetada para interceptar e analizar o tráfego TCP/IP entre o servidor e as aplicações cliente.
O FBScanner extrai em tempo real muitos detalhes sobre as conexões, queries (sentenças), transações, marca e rastreia todo este tráfego com um mecanismo único de marcas (tags). O FBScanner também pode registrar (log) toda a atividade numa base externa do Firebird e executar diversas atividades administrativas.

FBScanner (Firebird Scanner) é uam ferramenta que podemonitorar e visualizar o tráfego entre servidores Firebird e InterBase e suas aplicações cliente.

FBScanner Service funciona como um portão (proxy) no computador com Firebird/InterBase (somente Windows), ou pode ser instalado num computador remoto e trabalhar com o Firebird em todos os sistemas operacionais suportados (Windows, Linux, Mac OS X, HP-UX, etc).

FBScanner pode ser usado para fazer "profile" de aplicações de bases de dados, monitorar atividade dos usuários, gerenciar conexões a base de dados (inclusive desconectar clientes em ambas arquiteturas Classic e Superserver). É também ideal para solucionar problemas de erros  INET (INET/inet_error: send errno = 10054), bem como auditar aplicações existentes e fazer ajustes de performance.

FBScanner suporta Firebird (1.0, 2.0, 2.1, 2.5) e InterBase (4.0, 5.x, 6.x, 7.0, 7.1, 7.5, 2007, 2009, XE, XE3).

FBScanner é transparente do ponto de vista da aplicação cliente e não requer nenhuma modificação na aplicação ou no código fonte, lógica ou configuração da base de dados.

FBScanner V3.x funciona apenas em Windows e requer que seja instalda a Framework.NET 2.0 (ou superior). 

Apresentações do FBScanner

Como o FBScanner funciona

FBScanner Service

Importante ! Nesta seção nós não descrevemos o funcionamento do MON$Logger nem do Plu-in da  TraceAPI, é dedicada apenas ao FBScanner Service, FBScanner Viewer e LogAnalyzer.

O FBScanner Service normalmente tem que ser intalado no mesmo computador onde o servidor Firebird ou InterBase está rodando (como opção, você pode intalar em outro computador e então redirecionar o tráfego para o servidor atual Firebird ou InterBase). Durante a instalação do FBScanner o utilitário de configuração perguntará para escolher: Instalar o FBScanner na porta padrão do InterBase ou Firebird (3050) e mudar a configuração do serviço do Firebird service para a porta 3052 (isto pode ser ajustado), ou instalar o FBScanner para ouvir em outra porta TCP.

Importante ! FBScanner Service somente funciona com conexões TCP, portanto clientes usando strings de conexão local (XNET) e NetBeui (WNET) passarão pelo FBScanner sem monitoramento. PAa monitorar este tipo de aplicação você deverá usar o MON$Logger e o Plug-in da TraceAPI.

Se você escolheu a primeira opção de instalação, todas as requisições das aplicações passarão pelo FBScanner Service.

servidor-side installation
 
Remote installation
 
 

Impacto de Performance

No cenário típico do processo de otimização de performance inclui  a instalação do FBScanner em 1-2 estações de trabalho típicas para capturar o trafego SQL típico. Não existe motivo para interceptar e fazer log de todo o tráfico SQL de todas as estações - seria muita informação para analisar e muitas queries repetidas.

Porém, se você qusier instalar o FBScanner como um proxy para todo o servidor e fazer o log de todas as operações, certifique-se que aja a mesma banda de I/O, poder de CPU e memória RAM comparável com o servidor de produção. Para bases de dados com alta carga o log gerado pelo FBScanner pode crescer vários GB por dia. Neste caso recomendamos um servidor dedicado e independente para a instalação do FBScanner.

O FBScanner Service não modifica nada no tráfego e age simplesmente como um proxy transparente, então todas as aplicações vão continuar funcionando normalmente.O  FBScanner Service consome aproximadamente 125-150 MB para monitorar cerca de 50-70 cliente ativos, e diminuirá a performance da base de dados de 5 a 15% quando em uso. o Consumo de memória depende da forma que a caplicação cliente foi projetada. A banda de I/O requerida depende da intensidade do tráfego SQL monitorado.

Durante os testes nós verificamos o FBScanner em funcionamento em diversos ambientes do mundo real e aplicações em bases de dados de 30 a 200 conexões ativas e notamos que a degradação de performance é mínima. Em muitos casos os usuários não foram capazes de perceber que o monitoramento estava ativo.

Segmentação do Tráfego

O uso do FBScanner em uma porta diferente do padrão permite que o tráfego seja segmentado para aplicações diferentes. Por exmeplo, existe a aplicação A e B. A aplicação B é antiga e estável que não precisa de nenhum ajuste de performance ou monitoramento, e a aplicação A é nova . É fácil para configurar a string de conexão da nova aplicação A para usar uma porta diferente (por exemplo servidor/3070:Disk:\Path\database.gdb) e rotear todas as requisições da aplicação A pelo FBScanner a fim de monitorar as queries SQL e o comportamento da aplicação.


Usando esta abordagem você pode facilmente identificar e resolver problemas em um ambiente de produção, uma vez que o problema seja gerado pela nova aplicação, ou mesmo que este problema venha de um segmento específico da sua rede local.