Você está na página 1de 2

Configurações de Cache no Firebird

O tamanho do cache do banco de dados pode ser determinado por (em ordem de importância):
1.Padrão do servidor Firebird
2.Configuração do servidor (arquivo ibconfig)
3.Configuração por conexão (parâmetro isc_dpb_num_buffers)
4.Configuração por banco de dados

Padrão do servidor Firebird


São usados valores diferentes dependendo da versão do servidor:
•Firebird Classic (Linux) – 75
•Firebird Superserver (Windows) – 2048
•IB5 Superserver (Windows) – 256

Configuração do servidor (arquivo ibconfig)


Por ser uma configuração em nível de servidor, tenha cuidado quando existir mais de um banco de
dados em um único servidor Firebird. Por exemplo, se você usar o parâmetro
DATABASE_CACHE_PAGES definido em 10000 e utilizar 8000 páginas, isto significa 80MB de
cache por banco de dados. Então, após conectar 4 bancos de dados diferentes o Firebird irá alocar
320MB de RAM para cache! Por esta razão é melhor manter este valor relativamente pequeno e
definir o tamanho de cache individualmente para cada banco de dados.
Não se esqueça de retirar o comentário desta linha no arquivo ibconfig (retirando o # do início da
linha DATABASE_CACHE_PAGES) e reiniciar o Firebird (Superserver) para as alterações surtirem
efeito.

Configuração por conexão


É definida pelo parâmetro isc_dpb_num_buffers no bloco DPB, que é usada pela função
isc_attach_database(). Seu comportamento é diferente entre Classic e Superserver.
No Firebird classic cada usuário executa sua própria cópia do servidor Firebird, então cada usuário
tem seu próprio buffer, assim pode definir qualquer valor que queira (alterando o número de buffers
em um processo não afetará os outros usuários ou processos).
No Firebird Superserver, os buffers são compartilhados entre os usuários, o que significa:
•A primeira conexão pode mudar o tamanho do cache sem restrições (alterando para mais ou
para menos o tamanho determinado pelo arquivo ibconfig ou o padrão do servidor)
•Todas as conexões subseqüentes (secundárias) só podem aumentar o tamanho corrente
Pelo isql existem duas possibilidades de alterar o tamanho co cache em nível de conexão – ou pelo
parâmetro de linha de comando -c ou pelo parâmetro CACHE da sentença CONNECT. De fato o
FireBird não suporta diretamente a sentença CONNECT (não se pode executar diretamente um
CONNECT com chamadas isc_dsql_execute), o isql vai analisar esta linha de comando e quando
encontrar o CONNECT, irá convertê-lo chamando a função isc_attach_database(). Isto significa que
ambos, parâmetro ‘-c’ da linha de comando e parâmetro CACHE da sentença CONNECT são
finalmente convertidos no valor isc_dpb_num_buffers no bloco DPB. Quando usados os dois, CACHE
tem mais prioridade do que –c.

Configuração por banco de dados


Ao contrário do que a documentação diz (veja “Default cache size per ISQL connection”, no capítulo 6
do Operation Guide), esta configuração tem a mais alta prioridade, então ela não pode ser alterada
mesmo em nível de conexão!
Ela é definida geralmente pelo gfix (p.ex. gfix –buffers 1234) e armazenada na página de header do
banco de dados. O novo valor não tem efeito imediatamente, mas quando o servidor abre o arquivo
de banco de dados (depois de ter fechado todas as conexões).
O valor é preservado fazendo backup/restore, mas algumas vezes ele não funciona corretamente,
então ele deve ser verificado depois do restore. Você também pode alterar o valor durante o restore
(gbak –c –buffers 1234). Para anular as configurações de cache por banco de dados, mude o valor
para zero.

NOTAS:
•O tamanho do cache pode ser definido entre 50 e 65535 (64K). Se você usar valores fora desta
faixa o Firebird algumas vezes não irá reclamar, mas o valor será convertido para a faixa
correta de qualquer maneira
•É recomendável não usar cache maior do que 10000. Quanto maior o cache, mais a CPU terá
que trabalhar com ele e, em alguns níveis, o cache muito grande pode de fato degradar a
performance.
•Note que não existe o parâmetro CACHE para o comando CREATE DATABASE. Quando você
cria um novo banco de dados pelo isql e imediatamente verifica o tamanho de cache, você
verá que o parâmetro –c é ignorado e o valor padrão ou o valor do arquivo ibconfig será
usado.
•Para quem quiser jogar com estas configurações: para verificar o tamanho corrente do cache no
isql, use os comandos:
SET STAT;
COMMIT;
No WISQL use os menus:
Session
Basic Settings
Display Statistics
E então execute:
COMMIT;
•Um fato menos conhecido é que o tamanho do cache pode afetar significativamente o tempo de
login; quanto maior é o cache, maior é o tempo necessário para o login. As conexões
secundárias (no Superserver) são levemente mais rápidas, mas ainda visivelmente lentas.
Note que o isc4.gdb (que deve ser aberto durante cada login) mostra o mesmo efeito (login
lento) se você definir um tamanho grande de cache diretamente no banco de dados (pelo
gfix), mas não é influenciado pelo tamanho grande padrão no arquivo ibconfig.

Artigo Original:
http://www.volny.cz/iprenosil/interbase/ip_ib_cache.htm

Ivan Prenosil prenosil@NOSPAM.ms.anet.cz

Tradução e adaptação: Comunidade Firebird de Língua Portuguesa

Visite a Comunidade em:


Magda R. De Carli
mc@via-rs.net http://www.comunidade-firebird.org

A Comunidade Firebird de Língua Portuguesa foi autorizada pelo Autor do Original para elaborar esta tradução.

Você também pode gostar