configurações de cache no firebird

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).

Upload: euaepn

Post on 13-Jun-2015

615 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Configurações de Cache no Firebird

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 Firebird2.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 FirebirdSã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 dedados em um único servidor Firebird. Por exemplo, se você usar o parâmetroDATABASE_CACHE_PAGES definido em 10000 e utilizar 8000 páginas, isto significa 80MB decache por banco de dados. Então, após conectar 4 bancos de dados diferentes o Firebird irá alocar320MB de RAM para cache! Por esta razão é melhor manter este valor relativamente pequeno edefinir 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 dalinha DATABASE_CACHE_PAGES) e reiniciar o Firebird (Superserver) para as alterações surtiremefeito.

Configuração por conexãoÉ definida pelo parâmetro isc_dpb_num_buffers no bloco DPB, que é usada pela funçãoisc_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áriotem seu próprio buffer, assim pode definir qualquer valor que queira (alterando o número de buffersem 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 oupara 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 correntePelo isql existem duas possibilidades de alterar o tamanho co cache em nível de conexão – ou peloparâmetro de linha de comando -c ou pelo parâmetro CACHE da sentença CONNECT. De fato oFireBird não suporta diretamente a sentença CONNECT (não se pode executar diretamente umCONNECT com chamadas isc_dsql_execute), o isql vai analisar esta linha de comando e quandoencontrar o CONNECT, irá convertê-lo chamando a função isc_attach_database(). Isto significa queambos, parâmetro ‘-c’ da linha de comando e parâmetro CACHE da sentença CONNECT sãofinalmente convertidos no valor isc_dpb_num_buffers no bloco DPB. Quando usados os dois, CACHEtem mais prioridade do que –c.

Configuração por banco de dadosAo contrário do que a documentação diz (veja “Default cache size per ISQL connection”, no capítulo 6do Operation Guide), esta configuração tem a mais alta prioridade, então ela não pode ser alteradamesmo em nível de conexão!Ela é definida geralmente pelo gfix (p.ex. gfix –buffers 1234) e armazenada na página de header dobanco de dados. O novo valor não tem efeito imediatamente, mas quando o servidor abre o arquivode banco de dados (depois de ter fechado todas as conexões).

Page 2: Configurações de Cache no Firebird

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 valorpara 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 faixacorreta 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 aperformance.

•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 noisql, use os comandos:

SET STAT;COMMIT;

No WISQL use os menus:SessionBasic SettingsDisplay Statistics

E então execute:COMMIT;

•Um fato menos conhecido é que o tamanho do cache pode afetar significativamente o tempo delogin; quanto maior é o cache, maior é o tempo necessário para o login. As conexõessecundá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 (loginlento) se você definir um tamanho grande de cache diretamente no banco de dados (pelogfix), 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 [email protected]

Tradução e adaptação:

Magda R. De [email protected]

Comunidade Firebird de Língua Portuguesa

Visite a Comunidade em:

http://www.comunidade-firebird.org

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