Re-publicar quot;Guia de Performance Interbase / Firebirdq

11/12/2004

0

Alguem pode republicar o artigo:[b:9cb2aa9aa9]Guia de Performance Interbase / Firebird[/b:9cb2aa9aa9]
é que como a BD foi corrompida não se pode ser o artigo.

Já agora se deletassem os artigos com dados corrompidos era otimo, para não tentarmos le-los.


Decimus

Decimus

Responder

Posts

12/12/2004

Vinicius2k

Colega,
Já agora se deletassem os artigos com dados corrompidos era otimo, para não tentarmos le-los.

Deletando assim um dos maiores bancos de dados sobre Delphi e IB/FB do mundo? Esteja certo de que outras alternativas, menos radicais, estão sendo tentadas.

Conforme seu pedido :

[b:3c75ba2f94]Guia de Performance Interbase (I)[/b:3c75ba2f94] Por Peter Mc Leod Tradução: Cristiano de Favari Marcello Henrique da Costa Grec Este artigo tenta definir várias direções em como conseguir a melhor performance no Interbase. Antes de chegar aos aspectos que eu recomendaria no projeto de bancos de dados para atender às demandas de seus clientes, eu pediria que você lembrasse que geralmente os aspectos mais caros (na ordem) dos custos de um projeto são: 1. Desenvolvedores 2. Rede 3. Servidor Então, quando estiver priorizando seus recursos, mantenha os itens acima em mente. Também, um atalho tomado no começo (tal como não testar um banco de dados largamente povoado) sempre leva no mínimo três vezes mais tempo para reparar mais tarde, levando a custos no mínimo três vezes maiores. Desenvolvimento de Bancos de Dados ================================== Normalize seu Banco ------------------- Não interessa para qual banco de dados você esteja desenvolvendo, você tem que começar com um bom projeto. Assegure-se que você tenha seu banco de dados normalizado no mínimo na terceira forma normal. Assegure-se que suas chaves primárias são independentes de qualquer objeto de negócio que você esteja armazenando e, por razões de performance, use um Integer sempre que possível (Integers são 32 bits e ordenados mais rapidamente pela maioria dos algoritmos se comparado com campos Char e Varchar), a menos que você não possa fazer isto por uma razão específica (tal quando você precisa de um identificador único para replicação ou quando você está usando um banco de dados relacional para armazenar objetos). Chaves Primárias ---------------- Se você definir uma chave primária composta, mais que um índice é criado (um para cada coluna que compõe a chave). Como o otimizador de consultas usará os múltiplos índices para resolver a consulta, isto pode causar um gargalo para o otimizador, já que os múltiplos índices usados pelo otimizador são iguais aos campos da consulta. Chaves Estrangeiras ------------------- Chaves estrangeiras são essencialmente restrições de integridade referencial. O problema com chaves estrangeiras é que elas criarão um índice na respectiva tabela para facilitar a restrição. Normalmente isto não é um problema; contudo, se você tem uma restrição de chave estrangeira em colunas que tendem a não ter valores únicos, então você tem um índice bastante pobre. Se o otimizador de consultas utilizar um desses índices, isto causará um gargalo devido à pobreza dos índices. Nestes casos, remover os índices pode melhorar a performance das consultas em 100¬. Então tenha cuidado quando você definir suas chaves estrangeiras. Utilize Índices em Colunas de Ligadas (por operações de Join) ------------------------------------------------------------- Um índice é uma estrutura de dados de árvore balanceada que fornece uma melhora na velocidade de ordenação para um banco de dados. Índices do Intebase são de direções exatas (ascendente ou descendente) então, se você realiza uma busca de trás para frente nos dados de uma tabela, você deve definir um índice descendente. Índices trabalham melhor com dados que apresentam alguma exclusividade sobre ele. O otimizador de consultas do Interbase usará índices para acelerar as consultas. Índices na verdade podem ser prejudiciais à performance se criados em colunas que têm poucos valores únicos. Índices deixam lentas as inserções de dados em uma tabela, já que eles precisam ser recalculados a cada inclusão. Se você for fazer um grande número de inserções em uma tabela você pode considerar a desativação temporária de índices para minimizar o impacto de performance (ALTER INDEX name INACTIVE) e sua posterior reativação após as inclusões (ALTER INDEX name ACTIVE). Para determinar a eficiência de um índice, rode a seguinte instrução SQL: Select RDB$INDEX_NAME, RDB$STATISTICS from RDB$INDICES O valor RDB$STATISTICS mostra a eficiência do índice. Quanto mais baixo o valor, melhor o índice, com o valor 1 indicando um índice muito pobre. Como regra geral, você deve definir apenas uns poucos índices por tabela (o otimizador de consultas usará múltiplos índices para referenciar os mesmos campos conforme exigido pela consulta, portanto muitos índices podem degradar a performance). SQL --- Certas instruções SQL são mais lentas que outras. Geralmente, evite o uso de funções como ´CONTAINING´, ´LIKE´, ´´, ´COUNT´ e ´UPPER´ pois elas não usarão índices durante sua operação, tornando-as mais lentas que outros comandos. O livro ´SQL Performance Tuning´ de Peter Gulutzan e Trudy Pelzer cobre em detalhes como melhorar a eficiência de suas instruções SQL sem particularizar aspectos proprietários. Eu recomendaria este livro a qualquer um que esteja envolvido com o desenvolvimento em banco dados. Subconsultas Correlacionadas ---------------------------- Uma subconsulta correlacionada é uma subconsulta onde as condições da subconsulta são diferentes para cada linha na consulta principal. Por isto, as subconsultas precisam ser executadas várias vezes (uma para cada linha da consulta pai). Em alguns casos, uma junção pode substituir uma subconsulta correlacionada e resultará em um tempo de execução total menor para a mesma consulta. Joins Externos -------------- Outer joins são a realidade da programação em banco de dados. Left outer join tem a tendência de ser mais lento e um índice será apenas utilizado para a resolução do primeiro outer join na consulta. Onde possível, reduza a necessidade de left outer joins. Isto pode ser feito: - Projetando suas tabelas de forma a não serem necessários - Usando subconsultas (isto pode ser mais rápido que a solução left outer joins) - Usando um procedimento armazenado com select para aumentar a velocidade. Procedimentos Armazenados (Stored Procedures) --------------------------------------------- Quando criar um procedimento armazenado que contém laços aninhados assegure-se que o laço mais externo retorna o menor número possível de registros. Se possível, estruture seu procedimento armazenado de forma que os laços mais internos sejam sempre os mais rápidos já que são esses blocos os mais repetidos ao longo do processamento da rotina. Não Utilize Colunas Char e Varchar Longas ----------------------------------------- Antes do Interbase 7.0, Varchar´s and Char´s eram preenchidos ao tamanho do campo quando retornado ao cliente. Se você apenas preencher parte de um varchar grande ou um campo char e então retornar os resultados ao cliente, uma grande quantidade de tráfego de rede é gerado, degradando a performance de sua aplicação e da rede. Se possível, não use campos Varchar ou Char longos e, se possível, use BLOBs. Um Blob também tem a vantagem de ser armazenado em sua própria página no banco de dados e assim reduz a chance de qualquer bloqueio. Alternativamente, faça o upgrade para a versão 7.0 do Interbase. Colunas BLOB ------------ Um BLOB (Binary Large OBject) é um tipo e dado que suporta grandes objetos. Um Blob é definido com um tamanho de segmento e, no Interbase, este default é 80 bytes. Se um campo Blob é definido com um tamanho de segmento igual ao tamanho da página do banco de dados, então consultas a campos Blob tornam-se extremamente rápidas, pois apenas uma página precisa ser resgatada para retornar os dados. Sob estas situações, o Interbase não é um gargalo para a transferência de dados. Outros sistemas, como sistema de hardware, rede, etc, normalmente deixam baixa a taxa de transferência de dados. Utilize o Modelo Cliente-Servidor --------------------------------- Interbase fornece várias características que permitem que os processamentos sejam realizados no servidor (que possui geralmente maior capacidade de processamento que uma máquina cliente e também permite a redução do tráfego na rede). Triggers (gatilhos), UDFs e procedimentos armazenados são adequadamente detalhados no ´Guia do Programador´ e no ´Guia de definição de dados´ sem serem detalhados aqui. Plano de Consulta ----------------- Interbase usa um otimizador baseado em custo para otimizar a execução de instruções SQL. Na maioria dos casos, o otimizador faz um trabalho muito bom. Sob certas circunstâncias, o otimizador não seleciona o melhor plano para performance. Esteja informado que se você especificar seu próprio plano de consulta, o otimizador não analisará seu plano para assegurar que ele está correto. Detalhes de quando e como ajustar um plano de consulta do Interbase podem ser encontrados nos seguintes sites: * Specifying Query Access Plans in the Interbase Optimizer on the documentation page http://www.ibphoenix.com * Managing your Interbase Server by Paul McGee http://www.mers.com RDB$DB_KEY ---------- A rdb$db_key é um identificador de registro de baixo nível, mais rápido que chaves primárias para resgatar registros. Rdb$db_key´s são apenas válidos para a vida da transação corrente e não podem ser pensados como identificadores de registro imutáveis. É ainda possível utilizar rdb$db_keys para melhorar a performance de rotinas SQL em um banco de dados Interbase. A desvantagem é que este ganho de performance é específico do Interbase. Para mais detalhes em como utilizar rdb$db_key, por favor consulte os documentos localizados no seguinte website: http://www.cvalde.com/ibdocumentation Guia para o Servidor ==================== Utilize um Servidor Dedicado ---------------------------- Um servidor dedicado fornece a melhor performance para um banco de dados cliente-servidor. O custo de uma performance inadequada é muito maior que o custo da compra de um servidor dedicado. Performances baixas refletirão em você como desenvolvedor e normalmente resultarão em perda de tempo identificando e corrigindo problemas. Não leva muito tempo para você justificar os custos de um servidor dedicado. Utilize Linux ou Unix como SO do Servidor ----------------------------------------- Servidores Linux ou Unix têm melhor utilização de memória e de memória virtual, modelos de priorização de multi-processador mais eficientes e, frequentemente, requerem menos recursos de CPU e de memória que outros sistemas operacionais. Servidores Linux demonstram impressionantes tempos de atividade quando comparados a suas contrapartes Windows. Linux também não parece ser atormentado por processos misteriosos que degradam performance e que desaparecem logo que você loga no servidor para examinar o problema. Servidores Linux ou Unix podem ser integrados a redes Windows com SAMBA, fornecendo um ambiente homogêneo na perspectiva das estações cliente. Se Tiver que Usar o Windows --------------------------- Verifique a configuração do seu servidor Windows para ver se está configurado para fornecer os recursos máximos de compartilhamento ou para aplicações de segundo plano. Como estas opções estão localizadas em diferentes áreas em diferentes máquinas Windows, verifique sua documentação do Windows. Estes ajustes podem ter um grande impacto na performance do Interbase. Utilize Máquinas Mono-Processadas com InterBase ----------------------------------------------- Se você está usando uma versão do Interbase sob o Windows NT antes da versão 7.0, então não use um servidor com multi-processador na plataforma Windows. Se você fizer isto, o processo do servidor Interbase saltará de processador para processador causando degradação na performance do seu servidor. Se você quer usar Interbase (antes da versão 7.0) em um sistema com multi-processadores, então use uma ferramenta para amarrar o Intebase a um processador (há algumas delas disponíveis, inclusive uma da Microsoft). Contudo você deve ainda estar ciente que, como alguns dos sistemas operacionais Windows NT mais antigos não têm implementados um modelo adequado de suporte a SMP, o ganho de performance pode não ser tanto quanto o esperado. Sistemas Linux têm suporte a SMP adequado. Utilize um Disco Rígido Dedicado -------------------------------- Se você tem um banco de dados armazenado no mesmo drive que as pagefiles do servidor, a elevação das operações de I/O das operações de memória virtual do servidor impactará na performance de sua aplicação. Aloque sempre seu banco de dados em um drive separado. Se você tem dinheiro para isto, eu recomendaria que seu sistema operacional fosse para um drive, seu banco de dados para outro e o arquivo de swap para outro drive. E/S de Disco Rápida ------------------- Operações de I/O em disco são frequentemente um gargalo para performance do banco de dados. Drives IDE frequentemente usam algum recurso de CPU. Se você puder, coloque sistemas SCSI mais rápidos. Ser mesquinho nesta área custará muito a você em termos de degradação da performance. Sistemas RAID também oferecem melhor performance que sistemas de disco único. Um apropriado array de drives SCSI é a melhor solução. Utilize um IP Estático no Servidor ---------------------------------- Um IP estático no servidor significa que o endereço IP do servidor pode ser encontrado mais rápido do que se for usado um serviço de tradução de nomes de endereço. Este IP deveria ser armazenado no Host file do servidor e no Host files das máquinas cliente. Utilize TCP/IP como Protocolo de Rede ------------------------------------- TCP/IP é um protocolo baseado em conexão (pacotes são roteados para o receptor pretendido ao invés de ir para todas as máquinas) o qual gera menos tráfico de rede que protocolos sem conexão como NetBEUI and IPX/SPX. TCP/IP é também mais rápido que estes protocolos e tem a vantagem de estar disponível em uma grande variedade de plataformas. Sempre que possível, TCP/IP deveria ser usado para comunicar-se com o Interbase por suas vantagens de velocidade. Para melhorar a performance além disto não é aconselhável instalar múltiplos protocolos na rede pois isto aumenta o ´barulho´ na rede. Se isto for inevitável, assegure-se que o protocolo de rede que você usa terá maior prioridade através da rede. Não Utilize Proteção de Tela ---------------------------- Protetores de tela, particularmente os tipos 3GL podem estar sobrecarregando o processador e degradarão visivelmente o desempenho do sistema. Na maioria dos casos os protetores de tela não são necessários pois os monitores modernos são projetados de modo que o risco de queimar a tela seja insignificante pois possuem sistema de proteção de energia e se desligarão após certo período de tempo. Se você não tiver um monitor com sistema de proteção de energia somente desligue-o- você estará gastando menos energia e diminuindo o aquecimento da sua sala. Se você tiver que usar um protetor de tela então use uma tela em branco ou marquee (ajuste a velocidade do texto para uma taxa lenta para evitar a utilização excessiva da CPU) pois estes usam menos quantidade de recursos do sistema. Logins de Console ----------------- Muitas pessoas tendem a usar Windows NT/2000 pois estão mais familiarizadas com o sistema operacional Windows. Se você realmente usa Windows NT, então não faça login desnecessariamente ou fique logado. Além de ser uma questão de segurança, deixar o servidor logado permite que processos rodem em segundo plano, o que pode degradar a performance do servidor. Até mesmo processos em segundo plano podem usar de 20-30¬ dos recursos do servidor. Há várias ferramentas que permitem a você manter seu servidor Interbase sem a necessidade de ter o servidor continuamente logado. Utilize a Mesma Versão do Servidor no Cliente --------------------------------------------- Se você tem uma versão do Cliente do Interbase ultrapassada na sua máquina cliente, compare com a versão instalada no servidor. Você pode estar sofrendo com um problema de performance. Testes com Interbase 5.1 e 5.6 podem demonstrar uma performance diferente em pouco mais que 50¬ por usar uma instalação de cliente ultrapassada. Também, características mais novas podem não estarem disponíveis se você não está usando a mesma versão de cliente e servidor e erros de programa podem resultar (em alguns casos isto pode causar um crash no seu servidor Interbase e possivelmente corromper seu banco de dados). Vencendo Restrições de E/S de Disco ----------------------------------- É possível reduzir o problema de operações de E/S em discos no Interbase. Depois de ter realizado o backup e o restore, crie uma tabela temporária no banco de dados (usando campos Blob ou colunas Varchar grandes). Preencha esta tabela com uma grande quantidade de dados. Então apague (drop) a tabela temporária e faça o sweep do banco de dados. Isto significa que o Interbase irá aproveitar o espaço dentro do banco de dados durante operações e não pedirá para ao SO espaço em disco até que o espaço vazio dentro do banco de dados tenha sido aproveitado. Isto aumenta a velocidade de operações de gravação para o banco de dados na medida que E/S de disco não é essencialmente um fator de limitação. Proteção de Arquivos no Windows ------------------------------- Algumas versões do Windows (Windows XP) têm implementado mecanismos de proteção a arquivos com extensão.GDB (Banco de dados Interbase). Se você está usando Sistema Operacional Windows mais recente que Windows 2000, você pode experimentar de-activating Windows File Protection ou renomear seu banco de dados para uma extensão diferente (Para Banco de dados Interbase superior a 7.0 ou FireBird 1.5). Os cínicos entre nós podem querer saber se a Microsoft fez isto para reduzir a performance do Interbase em comparação ao seu próprio banco de dados, o SQL Server...


[b:3c75ba2f94]Guia de Performance Interbase (II)[/b:3c75ba2f94] Por Peter Mc Leod Tradução: Demian Lessa Configuração do Interbase ========================= Backups e Restaurações Regulares -------------------------------- Seu banco de dados é uma fonte de vantagem competitiva para seus clientes por causa da informação que contém. Realizar backups regulares é essencial para garantir a integridade dos dados de seus clientes. Restaurações são tão importantes já que otimizam o banco ao: - reconstruir índices, - eliminar versões obsoletas de registros (coleta de lixo), - desfragmentar páginas do banco, - reescrever as tabelas de forma contígua e - recalcular estatísticas do banco. Uma boa ferramenta para realizar backups e restaurações é o IBBackup que está disponível a partir de www.ibphoenix.com Nota: Aconselha-se que antes de restaurar seu banco de dados, você faça uma cópia do original e então proceda com a restauração. Isso se deve ao fato de que uma restauração realiza verificações de integridade no banco- uma atividade intensa em processamento. Como resultado, pode ser que um backup apresente problemas e não possa ser restaurado. A idéia do backup é conferir segurança sem impacto de performance. Classe de Prioridade Interbase ------------------------------ A Classe de Prioridade Interbase deve ser definida como alta (versão SuperServer no Windows) para assegurar que o Interbase pode solicitar mais recursos do sistema. Isso pode ser feito através do IBConsole na versão Windows. Ou editando o arquivo ibconfig e definindo a propriedade SERVER_PRIORITY_CLASS como 2 (remova o marcador de comentário ´#´). Desligue Async Writes --------------------- No Windows NT, o Interbase está configurado por padrão para executar escritas forçadas. Isso significa que as operações de escrita para o Interbase vão direto ao banco e não passam pelo sistema de cache do sistema operacional, normalmente lento. No Linux, o inverso ocorre. Isso pode resultar em diferenças de performance de mais de 300¬ para algumas operações. O problema é que se você desliga Async Writes no Windows, e o sistema operacional cai enquanto o Interbase escreve em disco, você corre o risco de perder dados e corromper seu banco. Como Linux é naturalmente mais estável esse não é um risco tão grande. Se você deseja desligar Async Writes tenha certeza de manter seus backups em dia e confirme que seu sistema de UPS no servidor está funcionando: GFIX -WRITE ASYNC/SYNC MYDATABASE.GDB Desligue a Coleta de Lixo ------------------------- Por padrão, o Interbase realiza uma varredura do banco para coletar o lixo de registros velhos, quando eles se acumulam. Infelizmente, isso pode causar sérios efeitos na performance do processo cliente que fez esse limite ser atingido. Para desabilitar a colta de lixo automática, você deve emitir o seguinte comando a partir do Gfix: gfix -h 0 Nota: Backups e restaurações regulares realizarão a coleta de lixo no banco. Essa é outra razão pela qual os backups e restaurações devem ser realizadas na máxima freqüência permitida. Posições Hash de Bloqueio ------------------------- O parâmetro Lock Hash Slots (Posições Hash de Bloqueio) é utilizado para determinar o tamanho da tabela de hash usada para encontrar os bloqueios em um objeto particular do banco (exceto nos sistemas VAX/VMS). O número deve ser primo para facilitar o algoritmo a gerar uma boa distribuição. Normalmente a primeira indicação de problema com esse parâmetro é a redução de performance do servidor (com vários usuários e um cache de páginas grande). Para determinar se o problema está na tabela, produza uma saída impressa da tabela (enquanto o sistema estiver em uso) e examine o comprimento médio do hash. Se for maior que 10 você está com problemas. Para calcular um novo valor para o Lock Hash Slots multiplique o comprimento médio pela quantidade atual de posições e divida o resultado por nove. Ajuste para maior para garantir que o número seja primo, mas que fique entre 101 e 2048 (os limites do parâmetro). Para alterar o parâmetro edite o arquivo ibconfig e mude o valor (remova o marcador de comentário ´#´). Eu normalmente uso LOCK_HASH_SLOTS com valor 503 para a maioria das instalações Interbase. Se você realizar essa operação na versão Super Server, você deve aumentar o tamanho da tabela de bloqueio também. Tamano de Página do Banco ------------------------- O tamano da página do banco determina a quantidade de dados que pode ser recuperada com um acesso lógico ao banco. O padrão para o Interbase é 1Kb, com valores permitidos de 2Kb, 4Kb e 8Kb. Para bancos pequenos, (menores que 4GB), defina o tamanho da página do banco para 4096 bytes (4KB); para bancos grandes, esse valor deve ser estabelecido em 8192 bytes (8K). Testes de performance em bancos de dados indicam que uma mudança no tamanho de página de 1KB para 4KB pode aumentar a performance em até 20¬. Ao utilizar páginas de 4KB para a maioria dos bancos, as operações de E/S do banco combinam com seus tamanhos de página com as do sistema operacional, resultando em maior eficiência e performance. Outras vantagens de páginas maiores incluem: · Menor fragmentação de registros e maior quantidade de registros por página · Menor quantidade de páginas retornadas por consulta (já que os registros são armazenados de forma mais contígua) · Índices em Árvore-B são mais rasos · E/S é mais contígua Os tamanhos de página indicados acima são diretrizes; recomenda-se que testes sejam realzados para a determinação do tamanho de página ótimo aplicável a cada sistema. Para que a alteração do tamanho de página do banco entre em funcionamento, será preciso realizar um backup e uma restauração do banco. Conjunto de Trabalho -------------------- Os parâmetros de configuração do conjunto de trabalho só são aplicáveis ao Interbase rodando sobre o Windows (arquitetura Super Server). Essas configurações determinam quanta memória RAM fica dedicada ao processo do Interbase. O conjunto de trabalho mínimo define a quantidade mínima de RAM física que é garantida ao processo do Interbase. O conjunto de trabalho máximo define a quantidade de memória a partir da qual o Interbase começará a usar o cache do sistema. Eu recomendo que o conjunto de trabalho mínimo seja determinado pelo valor de alocação das páginas de cache do banco somado a 3 MB. Deixando o conjunto de trabalho máximo em zero irá permitir que o próprio sistema determine o ponto no qual o Interbase deve ser transferido para disco. O conjunto de trabalho máximo deve ser sempre maior (ou zero) que o cache do banco ou o sistema irá paginar todas as operações contiuamente para disco. Cache do Banco -------------- O cache do banco de dados é um cache da quantidade de páginas do banco que serão mantidas no cache RAM do servidor. Alguma experimentação na definição do cache do banco (usando o ibconfig) a valores entre 256 e 10.000 produzem performances crescentes até um determinado ponto. Após esse ponto, performance reduzida é percebida. É uma boa idéia definir o cache de seu banco através do GFIX com o comando a seguir: Gfix -buffers 10000 -user sysdba -password masterkey mydatabase.gdb Se você tem um banco de dados pequeno, você deve utilizar estatísticas para determinar quantas páginas seu banco possui. Você não deve definir o cache para um valor maior que a quantidade de páginas do seu banco já que uma página do disco ocupará apenas uma página do cache. Considerações de Desenvolvimento ================================ Sempre Trabalhe com a Menor Quantidade de Dados Possível -------------------------------------------------------- Tráfego de rede é um fator preponderante na percepção da performance de sua aplicação. Se você possui 100.000 registros e você realiza algo como ´SELECT * FROM myTable´ você estará descarregando todos os registros. Utilizar filtros para retornar apenas um subconjunto dos dados reduz a quantidade de registros. Se possível, evite o uso de visões tabulares para conjuntos de dados grandes. Use o SQLMonitor (ou equivalente) para avaliar seus comandos SQL e verificar o que DE FATO ocorre enquanto sua aplicação roda. Não Mantenha Transações Abertas Mais Tempo que o Necessário ----------------------------------------------------------- Manter uma transação aberta pode travar registros em um banco. Manter transações abertas por períodos longos de tempo também irá aumentar a quantidade de memória que o Interbase requer para guardar o estado dessas transações. Ao invés de iniciar uma transação logo que a tela de entrada de dados é aberta e só confirmá-la quando o usuário pressionar o botão Salvar, é melhor manter uma cópia dos dados, iniciar uma transação e confirmá-la quando o usuário pressionar o botão Salvar. Um número de técnicas facilitam essa abordagem como, por exemplo, ClientDatasets. Essas técnicas apresentam inúmeras vantagens: · Reduzem o tráfego da rede · Reduzem o risco de bloqueios do banco · Reduzem o tempo de vida das transações · Reduzem a quantidade de memória necessária para o Interbase manter essas transações Sistemas Grandes, Muito Tráfego, Cache das Tabelas de Busca ----------------------------------------------------------- Se você possui dados que não mudam (como estados ou países), então você possui a oportunidade de disponibilizar esses dados em cache através de um ClientDataset na máquina do cliente (ao invés de recuperar os detalhes do servidor); você pode então simular uma ligação no lado do cliente através de um campo calculado. Isso permite reduzir o número de buscas no banco, reduzindo o tráfego na rede. Programe Diretamente sobre a API do Interbase --------------------------------------------- Se velocidade é uma absoluta necessidade, então um programa escrito em C com SQL embutido terá preformance melhor que uma aplicação Interbase cliente passando por camadas de middleware (como BDE). Esse tipo de aplicação é programada diretamente sobre a API em GDS32.DLL, que produz o ganho de performance. Use uma Conexão Remota ---------------------- Quando desenvolver sua aplicação não use uma conexão local para conectar-se ao banco (c:\path\mydatabase.gdb), já que esse tipo de conexão usa arquivos mapeados em memória para comunicação com o banco. Em algumas versões do Interbase o uso simultâneo de conexões locais e remotas pode causar a corrupção física do banco de dados. Use uma conexão remota sempre, já que essa modalidade de conexão oferecerá uma melhor indicação da real performance do seu sistema (servername:c:\path\mydatabase.gdb) e permitirá a identificação de problemas mais cedo. Melhor ainda, desenvolva sua aplicação conectando-se a um banco de dados numa máquina em outro ponto da rede. Alimente e Teste seu Sistema Durante o Desenvolvimento ------------------------------------------------------ Desenvolvedores normalmente utilizam um sistema limitado para testes na máquina de desenvolvimento. A desvantagem dessa abordagem é que a recuperação de alguns poucos registros (ou mesmo algumas centenas) no ambiente local será extremamente rápida. A realidade é que você deverá desenvolver um sistema cliente-servidor que irá executar em rede e que poderá ter alguns milhares ou mesmo milhões de transações. Para testar seu sistema, rode-o na rede e certifique-se de que o banco está alimentado devidamente (eu recomendaria alimentá-lo com aproximadamente 1/3 a mais de registros que o sistema de produção). Preferivelmente, realize seus testes no hardware mínimo e no ambiente de rede que você espera que seu sistema rode. Prepare e Parametrize suas Consultas ------------------------------------ Sempre que possível, escreva uma consulta que possa ser parametrizada e prepare a consulta antes de executá-la (ela só precisa ser preparada uma vez já que fica preparada até que você desprepare-a explicitamente ou altere o conteúdo da propriedade SQL). Consultas parametrizadas e preparadas são mais rápidas que consultas parametrizadas e não preparadas ou preparadas e não parametrizadas. Componentes VCL --------------- Um componente TQuery foi projetado para uso em aplicações cliente- servidor e deve ser utilizado sempre ao invés de TTable, que é para desenvolvimento de sistemas locais. Quanto utilizar TQuery, permita ao servidor lidar com atualizações, exclusões e conflitos definindo RequestLive como False. Não use Locate ou RecordCount já que esses métodos recuperam todos os registros. Use uma cláusula where para garantir que o servidor realiza a filtragem dos dados para você. Pense Sobre o que Está Fazendo ------------------------------ Quando projetar seu sistema lembre-se que só porque o Interbase permite que você faça algo não significa que é uma boa idéia. Todas as ações têm conseqüências. Pense no seu projeto, desenvolvimento e suas ramificações, na rede e nos clientes. Lembre-se que é possível que alguém tenha que dar manutenção nesse sistema. Algumas Coisas Serão Lentas --------------------------- Quando desenvolver um sistema se você tiver que realizar a mesma tarefa repeditamente, um milhão de vezes, digamos, será um processo lento não importa quão rápido sejam seus clientes e seu servidor. Se for esse o caso, verifique se sua filosofia de projeto permite que esse tipo de processamento seja retirado do sistema. Em alguns casos isso não será possível e você terá que empregar um mecanismo através do qual a tarefa é executada fora do expediente normal de uso do cliente. Use o Cliente ------------- Num sistema cliente-servidor, você não tem que enviar tudo de volta ao servidor para processamento. Você pode distribuir a carga realizando algum processamento no lado do cliente. Se você mantém detalhes de seus cálculos em cache, a vantagem é a redução no tráfego da rede, transações mais curtas e não ocupar o servidor com cada processamento. Um exemplo disso seria o cálculo do custo de cada item de um pedido de compra e o total da compra no cliente. Veja o que sua Aplicação Realmente Faz ao Invés de Pensar que ela Faz --------------------------------------------------------------------- Ferramentas como o SQL Monitor permitem que você tenha uma visão ampla da forma como sua aplicação solicita dados do Interbase. Essas ferramentas são valiosas ao permitir que você veja coisas como: · Conexão/Desconexão · Transações · Execução de Comandos · Operações sobre Comandos Váriso componentes da VCL se comportam de formas diferentes. Utilizando o SQL Monitor permite que você investigue o que está acontecendo por trás dos bastidores com esses componentes e também o que acontece quando você faz alterações no projeto de seu sistema. Outras ferramentas que devem estar no seu arsenal de desenvolvimento incluem: · Interbase Performance Monitor por Craig Stuntz (requer Interbase 7.0 ou superior) · Interbase Plan Analyser por Craig Stuntz · Sleuth QA Suite por TurboPower Software (permite ajustar a performance de aplicarivos Delphi/C++ Builder) Use Componentes para Acesso Nativo ---------------------------------- O BDE é agora um sistema obsoleto e não será mais suportado pela Borland. Componentes como IBX, FibPlus e IBObjects oferecem um ganho de performance de aproximadamente 40¬ em comparação com o BDE. Eles também oferecem acesso a mais recursos internos do Interbase. Para usar esses compontnetes, no entanto, amarra seu desenvolvimento ao Interbase. Se esse for um problema, então os componentes dbExpress oferecem a possibilidade de conectar-se ao Interbase e outros bancos ainda que mantendo uma boa performance (não tão boa quanto IBX etc, mas de certo muito melhor que o BDE). Buscando Registros ------------------ Soundex é um método de inexação, desenvolvido pelo departamento de recenseamento americano, para agrupar nomes que soam de forma semelhante. Como exemplo, realizar uma pesquisa de 300.000 registros para o nome ´smith´ pode levar 2,95s para completar enquanto que uma pesquisa usando soundex poderia retornar o resultado em 0,77s, exceto que o resultado incluiria, além do nome ´smith´, os nomes de todos que soam como ´smith´. Para uma boa introdução sobre a criação e utilização da função Soundex veja o artigo ´Implementing a Soundex Function´ por John Midwinter e encontrado em http://www.ibphoenix.com Outras Formas de Melhorar a Performance ======================================= Atualize o Interbase -------------------- Cada nova versão do Interbase (ou Firebird) traz melhorias que aumentam a performance do SGBD ou aumentam a flexibilidade do pragramador através de extensões de linguagem. A performance e a funcionalidade aumentadas permitem construir sistemas cliente-servidor melhores. Dada as recentes melhorias desses produtos, qualquer um usando uma vesão do Interbase anterior à versão 7.0 deve considerar uma atualização. Se essa não é uma opção, considere autalizar para a versão mais recente do Firebird. Bancos de Dados Somente-Leitura ------------------------------- Um banco normalmente reserva algum espaço livre em suas páginas (em torno de 25¬) para permitir a inclusão de novos registro. Num banco de dados onde o principal objetivo é a recuperação e visualização de dados, mais páginas precisam ser recuperadas para permitir a visualização. Para esses bancos somente-leitura, essas páginas podem ser preenchidas de modo que os dados estejam mais contíguos e menos páginas tenham que ser recuperadas. Utilize o seguinte comando GBAK: GBAK -C -USE_ALL_SPACE backup.gbk mydatabase.gdb


T+


Responder

12/12/2004

Decimus

Obrigadão :lol:


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar