GSTAT

Tópicos ›› Firebird ››
Parent Previous Next

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.
A restauração de um backup feito em um servidor de versão mais antiga em um servidor mais recente, automaticamente recria o arquivo de BD usando a versão mais recente da ODS daquele servidor.

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:
• 1 HP Apollo Domain OS
• 2 Sun Solaris SPARC, HP9000 s300, Xenix, Motorola IMP UNIX,
UnixWare, NCR UNIX, NeXT, Data General DG-UX Intel
• 3 Sun Solaris x86
• 4 VMS
• 5 VAX Ultrix
• 6 MIPS Ultrix
• 7 HP9000 s700/s800
• 8 Novell NetWare
• 9 Apple Macintosh 680x0
• 10 IBM AIX POWER series, IBM AIX PowerPC
• 11 Data General DG-UX 88K
• 12 HP MPE/xl
• 13 SGI IRIX
• 14 Cray
• 15 SF/1
• 16 Microsoft 32-bit Windows
• 17 IBM OS/2
• 18 Microsoft Windows 16-bit
• 19 Linux Intel
• 20 Linux SPARC

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:

  • force write: indica que o BD está configurado para o modo síncrono de escrita de dados, ou seja, o Firebird não irá manter os dados gravados no buffer de memória, e irá enviá-los diretamente para o disco.
  • no_reserve: indica que nenhum espaço está sendo reservado para os registros de versão (ver nota “reservando espaço”).
  • Shutdown: Indica que o BD está em modo shutdown, impossibilitando conexões de usuários que não seja o SYSDBA.

Sweep automático

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.

Reservando espaço

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.

Detectando possíveis problemas

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.

Conclusão

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