Você está na página 1de 5

Dicas para melhorar a performance do servidor Firebird

Use ndices corretamente


Defina ndices para todas as colunas que vo ser usadas para joins ou ordenaes. Os ndices so estruturas de dados de rvores balanceadas que fornecem um grande aumento na velocidade da procura dos valores nas colunas em que os ndices so definidos. Isto especialmente til quando ordenamos por uma coluna em particular ou juntamos duas tabelas por uma coluna que as duas tm em comum. Lembre que um ndice Firebird especfico para uma direo de ordenao, ascendente ou descendente (ASCENDING x DESCENDING), e a direo de um ndice deve ser igual direo escolhida quando se faz a ordenao. Se voc for usar as duas direes, ascendente ou descendente, crie dois ndices para as chaves de ordenao. As incluses e alteraes usam ndices para serem gravadas, o que pode prejudicar a performance durante um INSERT ou UPDATE, mas alguns custos impostos durante a entrada de dados podem resultar em um grande ganho de performance mais tarde na pesquisa destes dados. Para minimizar a perda de performance durante um INSERT, considere em desabilitar os ndices durante um grande volume de INSERTs. Isto ir desligar os ndices, tornando-os indisponveis para ajudar a acelerar as pesquisas, mas tambm no vo ser atualizados durante os INSERTs. Ento, reabilite-os depois de terminados os INSERTs, e os ndices sero atualizados e balanceados uma vez para todos os dados includos. Periodicamente reconstrua os ndices, desativando e ativando novamente (ALTER INDEX nome INACTIVE; seguido de ALTER INDEX nome ACTIVE;). Recalcule o ndice seletivamente (SET STATISTICS INDEX nome;) se uma mudana na tabela afeta a distribuio regular dos valores e dados. Os ndices tambm so reconstrudos do mesmo modo durante o restore.

Otimize as pesquisas
O Firebird ir analisar uma pesquisa (query) e o otimizador far a melhor estimativa de quais ndices devero ser empregados para acelerar a pesquisa. Mas nenhum otimizador automtico infalvel. Para queries complexas que sero usadas freqentemente, ou que sero aplicadas a um nmero elevado de dados, construa a pesquisa cuidadosamente. Use a opo SET PLAN da ferramenta ISQL para testar queries, ver sua performance e ver qual PLAN o otimizador escolheu. No Interbase v4.0, v4.1 e v4.2 existem alguns problemas conhecidos em tais queries usando a sintaxe JOIN na linguagem ANSI SQL-92, que no so analisados e otimizados corretamente. Evite esta sintaxe ou, se tiver que us-la, especifique seu prprio PLAN.

Ajuste o cache do Firebird


O Firebird mantm seu prprio cache de pginas do banco de dados correntemente em uso na RAM do servidor. O tamanho padro do cache na verso superserver (Windows) 2048 pginas de banco de dados (isto compartilhado por todos os clientes conectados a um dado banco de dados). Para um banco de dados com 1Kb de pginas, isto ainda somente 2048Kb. A maioria dos servidores tem muita memria, ento ponha em uso! Experimente ajustar o cache de 256 at 10.000 pginas. Em algum ponto ver diminuir os retornos, mas alguma experimentao ir revelar este ponto.

Faa Backup / Restore


Existem vrios benefcios em fazer periodicamente um backup/restore de um banco de dados Firebird usando o utilitrio GBAK: -reconstruir ndices; -eliminar verses obsoletas de registros (garbage); -defragmentar pginas de dados; -regravar tabelas de dados contiguamente; e -fazer uma cpia dos dados!

Use processamento Cliente-servidor


Usando funes externas (UDFs), Triggers, Stored Procedures e Select Procedures fazem com que o banco de dados faa muito processamento no servidor, que provavelmente um computador muito mais potente que a estao de trabalho. Esta tcnica evita tambm trfego de rede desnecessrio. Veja na documentao (Developers Guide e Data Definition Guide) detalhes do uso de UDFs, triggers e stored procedures.

Use o cache de disco do Sistema Operacional


A maioria dos sistemas operacionais oferece sistema de cache de disco para leitura/gravao. Com isto os programas podem fazer suas gravaes na RAM do servidor, e o sistema operacional ir salvar este contedo fisicamente no disco periodicamente. Fazendo sempre pequenas gravaes ou fazer de uma s vez numa operao maior pode aumentar bastante a performance de leitura/gravao de dados. Usar este sistema de cache de disco algumas vezes chamado de leitura/gravao assncrona (asynchronous I/O) ou gravao em cache (cached writes). Forando a gravao direta dos dados no disco, sobrepondo o sistema de cache, chamado de leitura/gravao sncrona (synchronous I/O) ou gravao forada (forced writes). O sistema de leitura/gravao assncrona tem o benefcio de aumentar a performance,

mas como a RAM um sistema voltil de armazenamento, pode perder dados se houver uma queda de energia ou uma falha no servidor ou ainda uma reinicializao do servidor quando o cache ainda no tiver sido descarregado no disco. A leitura/gravao sncrona garante que nada ser perdido por estar no cache, mas ler ou gravar diretamente no disco bem mais lento que faz-lo na RAM. O Firebird permite fazer a leitura/gravao assncrona ou sncrona. O comando GFIX WRITE SYNC <meubanco>.GDB faz o banco de dados usar a gravao forada (forced writes), e o comando GFIX WRITE ASYNC <meubanco>.GDB faz o banco usar a gravao em cache (cached writes). A gravao em cache pode ganhar muito em performance no Firebird, mas devem ser tomadas medidas de proteo contra perda de dados. Por exemplo, usando espelhamento de disco para manter uma duplicao dos dados. Usando tambm no-break e estabilizadores para garantir uma energia estvel e ininterrupta para o servidor. Com medidas como estas, a leitura/gravao assncrona pode trazer benefcios sem sacrificar a segurana.

Administre o protocolo de rede


O protocolo TCP/IP muito mais rpido que o SPX ou NetBEUI. Conectar sua rede usando TCP/IP resultar em uma melhor performance. O servio NetBEUI tem um prioridade baixa em servidores NT, mas existe um meio no sistema operacional para aumentar a prioridade deste servio. Alguns usurios dizem ter aumentado a performance depois de ter feito isto. Veja na documentao do Windows NT as instrues para ajustar a prioridade dos servios NetBEUI. NOTA: A partir do Windows NT 4.0, a performance da implementao do Microsoft NetBEUI foi aumentada. agora pelo menos to boa quanto a implementao do Microsoft TCP/IP, entretanto, em uma rede ocupada, o NetBEUI ainda limitado por ser um protocolo independente de coneco. Isto significa que cada host na rede deve checar cada pacote para ver seu contedo. Com mais hosts transmitindo na rede, cada host deve manipular uma crescente leitura de nmeros errados.

Escolha o sistema operacional


Sistemas operacionais basados no UNIX/Linux so sempre mais rpidos em multiprocessamento que sistemas Windows em um mesmo equipamento. Se velocidade algo importante para voc considere o uso desta plataforma. Pense sempre em utilizar o Firebird como servidor dedicado, que no funcione como servidor de arquivos, pois ele poder ficar sentado no banco de trs nas questes de prioridade de processamento.

No Windows NT o servidor configurado para dar prioridade ao compartilhamento de arquivos. Voc pode modificar esta configurao no servidor: Painel de Controle -> Rede -> Software de Rede. Modifique para balancear ou servidor de banco de dados. Esta modificao ir resultar em uma melhora dramtica na performance do Firebird. O uso de sistemas operacionais no especficos para us ode Servidores como os Windows 9x, Me ou XP Home podem prejudicar sua performance, alm das fragilidades conhecidas.

Considere a limpeza do lixo (garbage collection)


O Firebird tem por padro a funo de automaticamente limpar as antigas verses dos registros quando estas se tornam muito numerosas. O problema deste mtodo que se um processo cliente que for sem sorte suficiente para iniciar uma transao que coincida com o incio da limpeza automtica, vai ter que esperar o trabalho de limpeza. O processo cliente atrasa enquanto o processo de limpeza feito. Desabilite a limpeza automtica (automatic garbage collection), usando GFIX h 0, em favor da limpeza programada (scheduled database sweep), usando GFIX s. Isto ir eliminar a perda na performance do cliente. Fazer um backup e restore efetivamente faz a mesma coisa do que uma limpeza completa no banco de dados. O backup somente copia a verso mais recente de cada registro, nunca copia verses anteriores, assim, quando os dados so restaurados, existe somente uma verso de cada registro. Existem tambm outros benefcios de fazer backup/restore, descritos na seo prpria deste artigo. Falando em limpeza do lixo, muitos programadores no se do conta da necessidade de iniciar e terminar (START e COMMIT) suas transaes com o banco de dados. Abrir transaes impede que a varredura peridica complete a limpeza do lixo, e a performance ir sofrer progressivamente com o tempo.

Normalize seu banco de dados


Projete seu banco de dados com uma normalizao adequada dos dados. Registros que tm muitos grupos de campos repetidos so maiores que deveriam ser, podem aumentar o custo de ordenao e ainda podem causar a ocupao de mais pginas do que o necessrio, resultando em uma maior fragmentao de pginas e um banco de dados enorme sem necessidade.

Pense nas transaes


Projete sua aplicao para que resolva o mais rpido possvel as transaes depois de abertas. Freqentemente os programadores de aplicao abrem uma transao e apresentam uma tela de entrada de dados para o usurio. Ao invs disso, pegue os dados com o usurio

antes, abra uma transao para dar o INSERT e ento d o COMMIT na transao imediatamente. O propsito disto diminuir o tempo de durao das transaes, que diminui a probabilidade de duas aplicaes concorrentes conflitarem em um bloqueio de registro. Isto tambm ajuda a evitar muitos ROLLBACKs e trfego de rede, j que a sua aplicao decide quando submeter os dados ao banco ou descart-los.

Programe com a API do Firebird


Um programa escrito em C com SQL embutido responde melhor que uma aplicao cliente Firebird escrita em Paradox, Delphi ou outra ferramenta visual. A idia programar diretamente na API do Firebird ao invs de adicionar camadas intermedirias com mais um protocolo de rede sobre ele.
Artigo Original: http://www.ibphoenix.com/main.nfs?a=ibphoenix &l=;IBPHOENIX.PAGES;NAME='ibp_tip_perf' Time da IBPhoenix

http://www.ibphoenix.com
Comunidade Firebird de Lngua Portuguesa Visite a Comunidade em:

Traduo e adaptao: Magda R. De Carli mc@via-rs.net

http://www.comunidade-firebird.org

A Comunidade Firebird de Lngua Portuguesa foi autorizada pelo Autor do Original para elaborar esta traduo.

Você também pode gostar