Se você alguma vez já se perguntou: “Como saber em qual dialeto está o banco de dados?”, “Qual o tamanho atual das páginas?”, “A escrita síncrona está ativa?”, então é porque desconhece a existência do gStat!
O gStat é um utilitário de linha de comando que é instalado junto com o Firebird (na instalação completa) dentro da pasta bin, e que retorna diversas informações sobre um determinado banco de dados. As informações retornadas dependem dos parâmetros passados para o utilitário, que podem ser:
-a faz a análise dos dados e das páginas de índice
-d analisa as páginas de dados
-h analisa a página de cabeçalho do BD (header page)
-I analisa as “folhas” das páginas de índices
-l analisa a página de log
-s analisa os relacionamentos das tabelas de sistema
-u nome do usuário para conectar no BD
-p senha para conexão
-r analisa o tamanho médio dos registros e versões
-t especifica o nome da tabela a ser analisada
-z exibe informações da versão do gStat
Analisaremos nesse artigo as opções retornadas pelo parâmetro –h, ou seja, as informações do header do BD. .
A primeira opção que desvendaremos é a análise do header do BD. Vejamos o que significa cada informação retornada:
Campo |
Descrição |
Checksum |
Esse campo é uma herança do InterBase. No Firebird, ele sempre retornará 12345. |
Generation |
Esse valor é incrementado cada vez que a página de header é escrita (alterada) |
Page size |
O tamanho definido para as páginas do banco de dados. Um BD é formado por diversas páginas, de diversos tipos. As páginas têm tamanho fixo, que é determinado no momento da criação do banco de dados ou então quando ele é restaurado de um backup (através do parâmetro –p do gbak) |
ODS version |
Mostra a versão da estrutura do arquivo do Banco de Dados. Geralmente a adição de novos recursos ao servidor exige alguma alteração na estrutura física do arquivo de banco de dados utilizado por ele. A ODS (On Disk Structure) informa ao servidor qual é a versão da estrutura de um determinado arquivo de banco de dados. |
Oldest Transaction |
Informa qual o número da OIT (Oldest Interesting Transaction), ou seja, a transação mais antiga que não esteja com o status de commit, ou seja, ativa, limbo ou rolled-back. |
Oldest Active |
ID da transação mais antiga que ainda está ativa no BD |
Oldest Snapshot |
ID da transação mais antiga que ainda estava aberta quando a transação identificada pela Oldest Active foi iniciada. |
Next Transaction |
Mostra o ID da próxima transação a ser criada. |
Bumped Transaction |
Não é mais utilizado. |
Sequence Number |
O número seqüencial da página de header, começando por zero (primeira página). |
Next attachment ID |
ID da próxima conexão com o banco de dados. O ID de uma conexão com o banco pode ser obtido internamente (em procedures, selects, triggers, etc) através da variável current_connection. |
Implementation ID |
Determina a arquitetura do sistema onde o BD foi criado. Alguns valores: |
Shadow count |
Exibe o número de arquivos de shadow desse banco de dados. Arquivos de shadow podem ser criados e refletem a imagem exata do arquivo principal do banco de dados. Geralmente são criados em outro HD, para que no caso de uma falha do HD principal, o shadow possa assumir o lugar do BD principal, evitando que o servidor fique “parado”. |
Page buffers |
Tamanho do buffer de cache, em número de páginas. S estiver zero, indica que o valor utilizado é o padrão, definido no arquivo firebird.conf pelo parâmetro DefaultDBCachePages. |
Next header page |
Caso o BD possua mais de uma página de header, esse valor indica o número da página de header posterior. |
Database dialect |
Exibe qual é o dialeto atual do Banco de Dados. O Firebird suporta os dialetos 1,2 e 3, sendo que o 1 é para manter a compatibilidade com bancos de dados criados no InterBase 5.x e anteriores; o 2 é utilizado apenas para detectar inconsistências durante a passagem de um BD do dialeto 1 para 3; e o 3 é o dialeto mais rico e mais recente, tendo seu uso recomendado. |
Creation date |
Data e hora da criação do BD. |
Attributes |
Exibe alguns atributos do BD:
|
O sweep é um processo de limpeza do banco de dados. Através dele, o Firebird libera espaços que não serão mais utilizados para que possam ser reaproveitados no servidor. Diferente do processo automático de Garbage Collection, o sweep processa também os registros que foram descartados devido a um rollback de uma transação. O valor padrão para iniciar o sweep automático é 20.000, ou seja, quando a diferença entre o ID da OST (Oldest Snapshot Transaction) e a OIT (Oldest Interesting Transaction) for igual a 20.000, o sweep será disparado. Obviamente, após o término do sweep, o número da OIT terá avançado.
O Firebird trabalha com o sistema de concorrência chamado Versioning, ou MGA (Multi Gerational Architecture). Esse modo faz uso de versões temporárias de registros, permitindo que uma transação enxergue os valores de um registro como eles eram em um determinado momento no tempo. Para agilizar o controle de concorrência, o Firebird “reserva” automaticamente 20% do espaço de uma página de dados para trabalhar com essas versões de registro. No entanto, há situações onde o BD será somente para leitura (catálogos em CD, por exemplo) o que torna um desperdício a reserva desse espaço. Podemos indicar durante a restauração de um backup, através do parâmetro -USE_(ALL_SPACE) do gbak, que não desejamos reservar espaço para os registros temporários, fazendo com que o tamanho do BD fique reduzido.
Um dos usos mais importantes do gStat é para detectar possíveis problemas no gerenciamento transacional, que podem fazer com que o BD fique lento em determinadas situações de grande concorrência, etc.
Para saber se as aplicações clientes estão trabalhando adequadamente com o controle transacional, devemos monitorar, com o BD em uso, os valores:
Oldest transaction
Oldest active
Next transaction
Se a diferença entre Oldest active e Next transaction for muito grande, pode indicar que as transações estão ficando abertas por muito tempo, o que sugere uma falha no controle transacional da aplicação cliente que faz acesso ao BD.
Se a diferença entre OST e OIT for maior que 20.000, pode indicar que o sweep automático está desligado, ou configurado com um valor demasiadamente alto. No primeiro caso, você deverá realizar periodicamente um sweep manual no BD através do utilitário gfix. Para o segundo caso, pode-se usar o gfix para configurar um novo valor para o sweep automático.
Ambas as situações descritas acima podem fazer com que a performance do BD caia bastante em um ambiente de muita concorrência.
Vimos nesse artigo como recuperar informações sobre um BD, determinando assim suas características gerais como dialeto, tamanho da página, etc.
Aprendemos também que o gstat pode nos ajudar a detectar problemas de concorrência no BD, o que geralmente leva a perda de performance no servidor.
Em um próximo artigo, estaremos analisando as outras opções do gstat.
Autor: Carlos Henrique Cantu - publicado originalmente na edição 001 da DB FreeMagazine
Created with the Personal Edition of HelpNDoc: Free iPhone documentation generator