FBScanner (Firebird Scanner) é uma ferramenta para resolver todos os tipos de problemas de performance com o Firebird.
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
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.
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).
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).
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.
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.
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.
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).
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).
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 |
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.
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.