dicas para melhorar a performance do servidor firebird

3
Dicas para melhorar a performance do servidor Firebird Data: Thursday, March 06 @ 22:51:20 Tópico Administrador Confira esta matéria enviada pelo nosso colaborador Celso Rodrigues. [email protected] Use índices corretamente Defina índices para todas as colunas que vão ser usadas para join’s ou ordenações. Os índices são estruturas de dados de árvores balanceadas que fornecem um grande aumento na velocidade da procura dos valores nas colunas em que os índices são definidos. Isto é especialmente útil quando ordenamos por uma coluna em particular ou juntamos duastabelas por uma coluna que as duas têm em comum.Lembre que um índice Firebird é específico para uma direção de ordenação, ascendente ou descendente (ASCENDING x DESCENDING), e a direção de um índice deve ser igual à direção escolhida quando se faz a ordenação. Se você for usar as duas direções, ascendente ou descendente, crie dois índices para as chaves de ordenação. As inclusões e alterações 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 indisponíveis para ajudar a acelerar as pesquisas, mas também não vão ser atualizados durante os INSERTs.Então, reabilite-os depois de terminados os INSERTs, e os índices serão atualizados e balanceados uma vez para todos os dados incluídos.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 mudança na tabela afeta a distribuição regular dos valores e dados. Os índices também são reconstruídos 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 deverão ser empregados para acelerar a pesquisa. Mas nenhum otimizador automático é infalível. Para queries complexas que serão usadas freqüentemente, ou que serão aplicadas a um número elevado de dados, construa a pesquisa cuidadosamente. Usea opção 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 não são analisados e otimizados corretamente. Evite esta sintaxe ou, se tiver que usá-la, especifique seu próprio PLAN. Ajuste o cache do Firebird O Firebird mantém seu próprio cache de páginas do banco de dados correntemente em uso na RAM do servidor. O tamanho padrão do cache na versão superserver (Windows) é 2048 páginas 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 páginas, isto ainda ésomente 2048Kb. A maioria dos servidores tem muita memória, então ponha em uso! Experimente ajustar o cache de 256 até 10.000 páginas. Em algum ponto verá diminuir os retornos, mas alguma experimentação irá revelar este ponto. Faça Backup / Restore Existem vários benefícios em fazer periodicamente um backup/restorede um banco de dados Firebird usando o utilitário GBAK:-reconstruir índices;-eliminar versões obsoletas de registros (‘garbage’);-defragmentar páginas de dados;-regravar tabelas de dados contiguamente; e -fazer uma cópia dos dados! Use processamento Cliente-servidor Usando funções externas (UDFs), Triggers, Stored Procedures e Select Procedures fazem com que o banco de dados faça muito processamento no servidor, que provavelmente é um computador muito mais potente que a estação de trabalho. Esta técnica evita também tráfego de rede desnecessário. Use o cache de disco do Sistema Operacional A maioria dos sistemas operacionais oferece sistema de cache de disco para leitura/gravação. Com isto os programas podem fazer suas gravações na RAM do servidor, e o sistema operacional irá salvar este conteúdo fisicamente no disco periodicamente. Fazendo sempre pequenas gravações ou fazer de uma só vez numa operação maior podeaumentar bastante a performance de leitura/gravação de dados. Usar este sistema de cache de disco é algumas vezes chamado de leitura/gravação :: Active Delphi http://www.activedelphi.com.br/print.php?sid=29 1 de 3 15/05/2009 14:53

Upload: euaepn

Post on 11-Jun-2015

1.075 views

Category:

Documents


14 download

TRANSCRIPT

Page 1: Dicas Para Melhorar a Performance Do Servidor Firebird

Dicas para melhorar a performance do servidor FirebirdData: Thursday, March 06 @ 22:51:20

Tópico Administrador

Confira esta matéria enviada pelo nosso colaborador Celso [email protected] índices corretamente

Defina índices para todas as colunas que vão ser usadas para join’s ou ordenações. Os índices são estruturas de dados deárvores balanceadas que fornecem um grande aumento na velocidade da procura dos valores nas colunas em que os índicessão definidos. Isto é especialmente útil quando ordenamos por uma coluna em particular ou juntamos duastabelas por umacoluna que as duas têm em comum.Lembre que um índice Firebird é específico para uma direção de ordenação, ascendente oudescendente (ASCENDING x DESCENDING), e a direção de um índice deve ser igual à direção escolhida quando se faz aordenação. Se você for usar as duas direções, ascendente ou descendente, crie dois índices para as chaves de ordenação. Asinclusões e alterações usam índices para serem gravadas, o que pode prejudicar a performance durante um INSERT ouUPDATE, mas alguns custos impostos durante a entrada de dados podem resultar em um grande ganho de performance maistarde 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 indisponíveis para ajudar a aceleraras pesquisas, mas também não vão ser atualizados durante os INSERTs.Então, reabilite-os depois de terminados os INSERTs,e os índices serão atualizados e balanceados uma vez para todos os dados incluídos.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 mudança na tabela afeta a distribuição regular dos valores edados. Os índices também são reconstruídos 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 deverão ser empregadospara acelerar a pesquisa. Mas nenhum otimizador automático é infalível. Para queries complexas que serão usadasfreqüentemente, ou que serão aplicadas a um número elevado de dados, construa a pesquisa cuidadosamente. Usea opçãoSET PLAN da ferramenta ISQL para testar queries, ver sua performance e ver qual PLAN o otimizador escolheu. No Interbasev4.0, v4.1 e v4.2 existem alguns problemas conhecidos em tais queries usando a sintaxe JOIN na linguagem ANSI SQL-92, quenão são analisados e otimizados corretamente. Evite esta sintaxe ou, se tiver que usá-la, especifique seu próprio PLAN.

Ajuste o cache do Firebird

O Firebird mantém seu próprio cache de páginas do banco de dados correntemente em uso na RAM do servidor. O tamanhopadrão do cache na versão superserver (Windows) é 2048 páginas de banco de dados (isto é compartilhado por todos osclientes conectados a um dado banco de dados). Para um banco de dados com 1Kb de páginas, isto ainda ésomente 2048Kb. Amaioria dos servidores tem muita memória, então ponha em uso! Experimente ajustar o cache de 256 até 10.000 páginas. Emalgum ponto verá diminuir os retornos, mas alguma experimentação irá revelar este ponto.

Faça Backup / Restore

Existem vários benefícios em fazer periodicamente um backup/restorede um banco de dados Firebird usando o utilitárioGBAK:-reconstruir índices;-eliminar versões obsoletas de registros (‘garbage’);-defragmentar páginas de dados;-regravartabelas de dados contiguamente; e-fazer uma cópia dos dados!

Use processamento Cliente-servidor

Usando funções externas (UDFs), Triggers, Stored Procedures e Select Procedures fazem com que o banco de dados façamuito processamento no servidor, que provavelmente é um computador muito mais potente que a estação de trabalho. Estatécnica evita também tráfego de rede desnecessário.

Use o cache de disco do Sistema Operacional

A maioria dos sistemas operacionais oferece sistema de cache de disco para leitura/gravação. Com isto os programas podemfazer suas gravações na RAM do servidor, e o sistema operacional irá salvar este conteúdo fisicamente no discoperiodicamente. Fazendo sempre pequenas gravações ou fazer de uma só vez numa operação maior podeaumentar bastante aperformance de leitura/gravação de dados. Usar este sistema de cache de disco é algumas vezes chamado de leitura/gravação

:: Active Delphi http://www.activedelphi.com.br/print.php?sid=29

1 de 3 15/05/2009 14:53

Page 2: Dicas Para Melhorar a Performance Do Servidor Firebird

assíncrona (asynchronous I/O) ou gravação em cache (cached writes). Forçando a gravação direta dos dados nodisco,sobrepondo o sistema de cache, é chamado de leitura/gravação síncrona (synchronous I/O) ou gravação forçada (forcedwrites). O sistema de leitura/gravação assíncrona tem o benefício de aumentar a performance, mas como a RAM é um sistemavolátil de armazenamento, pode perder dados se houver uma queda de energia ou uma falha no servidor ou ainda umareinicialização do servidor quando o cache ainda não tiver sidodescarregado no disco. A leitura/gravação síncrona garante quenada será perdido por estar no cache, mas ler ou gravar diretamente no disco é bem mais lento que fazê-lo na RAM.O Firebirdpermite fazer a leitura/gravação assíncrona ou síncrona. O comando GFIX –WRITE SYNC <meubanco>.GDB faz o banco dedados usar a gravação forçada (forced writes), e o comando GFIX –WRITE ASYNC <meubanco>.GDB faz o banco usar agravação em cache (cached writes).A gravação em cache pode ganhar muito em performance no Firebird, mas devem sertomadas medidas de proteção contra perda de dados. Por exemplo, usando espelhamento de disco para manter umaduplicação dos dados. Usando também no-break e estabilizadores para garantir uma energia estável e ininterrupta para oservidor. Com medidas como estas,a leitura/gravação assíncrona pode trazer benefícios sem sacrificar a segurança.

Administre o protocolo de rede

O protocolo TCP/IP é muito mais rápido que o SPX ou NetBEUI. Conectar sua rede usando TCP/IP resultará em uma melhorperformance. O serviço NetBEUI tem um prioridade baixa em servidores NT, mas existe um meio no sistema operacional paraaumentar a prioridade deste serviço. Alguns usuários dizem ter aumentado a performance depois de ter feito isto. Veja nadocumentação do Windows NT as instruções paraajustar a prioridade dos serviços NetBEUI. NOTA: A partir do Windows NT4.0, a performance da implementação do Microsoft NetBEUI foi aumentada. É agora pelo menos tão boa quanto aimplementação do Microsoft TCP/IP, entretanto, em uma rede ocupada, o NetBEUI é ainda limitado por ser um protocoloindependente de conecção. Isto significa que cada host na rede deve checar cada pacote para ver seu conteúdo. Com maishosts transmitindo na rede, cada host deve manipular uma crescente leitura de "números errados".

Escolha o sistema operacional

Sistemas operacionais basados no UNIX/Linux são sempre mais rápidos em multiprocessamento que sistemas Windows em ummesmo equipamento. Se velocidade é algo importante para você considere o uso desta plataforma. Pense sempre em utilizar oFirebird como servidor dedicado, que não funcione como servidor de arquivos, pois ele poderá ficar sentado no "banco de trás"nas questões de prioridade de processamento.No Windows NT o servidor é configurado para dar prioridade aocompartilhamento de arquivos. Você pode modificar esta configuração no servidor: Painel de Controle -> Rede -> Software deRede. Modifique para "balancear" ou "servidor de banco de dados". Esta modificação irá resultar em uma melhora dramática naperformance do Firebird.O uso de sistemas operacionais não específicos para uso de Servidores como os Windows 9x, Me ouXP Home podem prejudicar sua performance, além das fragilidades conhecidas.

Considere a limpeza do lixo (garbage collection)

O Firebird tem por padrão a função de automaticamente limpar as antigas versões dos registros quando estas se tornam muitonumerosas. O problema deste método é que se um processo cliente que for sem sorte suficiente para iniciar uma transaçãoque coincida com o início da limpeza automática, vai ter que esperar o trabalho de limpeza. O processo clienteatrasa enquantoo processo de limpeza é feito. Desabilite a limpeza automática (automatic garbage collection), usando GFIX –h 0, em favor dalimpeza programada (scheduled database sweep), usando GFIX –s. Isto irá eliminar a perda na performance do cliente.Fazerum backup e restore efetivamente faz a mesma coisa do que uma limpeza completa no banco de dados. O backup somentecopia a versão mais recente de cada registro, nunca copia versões anteriores, assim, quando os dados são restaurados, existesomente uma versão de cada registro. Existem também outros benefícios de fazer backup/restore,descritos na seção própriadeste artigo. Falando em limpeza do lixo, muitos programadores não se dão conta da necessidade de iniciar e terminar (STARTe COMMIT) suas transaçõescom o banco de dados. Abrir transações impede que a varredura periódica complete a limpeza dolixo, e a performance irá sofrer progressivamente com o tempo.

Normalize seu banco de dados

Projete seu banco de dados com uma normalização adequada dos dados. Registros que têm muitos grupos de camposrepetidos são maiores que deveriam ser, podem aumentar o custo de ordenação e ainda podem causar a ocupação de maispáginas do que o necessário,resultando em uma maior fragmentação de páginas e um banco de dados enorme semnecessidade.

Pense nas transações

Projete sua aplicação para que resolva o mais rápido possível as transações depois de abertas. Freqüentemente osprogramadores de aplicação abrem uma transação e apresentam uma tela de entrada de dados para o usuário. Ao invés disso,pegue os dados com o usuárioantes, abra uma transação para dar o INSERT e então dê o COMMIT na transaçãoimediatamente. O propósito disto é diminuir o tempo de duração das transações, que diminui a probabilidade de duasaplicações concorrentes conflitarem em um bloqueio de registro. Isto também ajuda a evitar muitos ROLLBACKs e tráfego derede, já que a sua aplicação 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 aplicação cliente Firebird escrita em Paradox, Delphiou outra ferramenta visual. A idéia é programar diretamente na API do Firebird ao invés de adicionar camadas intermediárias

:: Active Delphi http://www.activedelphi.com.br/print.php?sid=29

2 de 3 15/05/2009 14:53

Page 3: Dicas Para Melhorar a Performance Do Servidor Firebird

com mais um protocolo de rede sobre ele.

Digitado por :: Active Delphihttp://www.activedelphi.com.br/

A URL para esta notícia é:http://www.activedelphi.com.br/modules.php?op=modload&name=News&file=article&sid=29

:: Active Delphi http://www.activedelphi.com.br/print.php?sid=29

3 de 3 15/05/2009 14:53