Você é um Tuner?

Autora: Eleni Lumi Hiratsuka - GPS  

Resumo

Calma, vamos esclarecer a pergunta. Primeiro de tudo, tuner não é um palavrão! Tuner é apenas a pessoa que faz tuning. Ai, ai, ai, que faz o quê? T-U-N-I-N-G. Quando você gira o botão do seu rádio (tudo bem, hoje em dia você só aperta botões) para encontrar uma estação, você está fazendo tuning, você está sintonizando o seu aparelho ao comprimento da onda desejada. Quando você enche ou esvazia o pneu do seu carro, você está fazendo tuning, você está calibrando os pneus, está dando a conveniente pressão de ar a eles. Assim, tuning, do inglês, pode significar sintonia, calibragem, afinação. Como verbo, TUNE, é a ação de se fazer "ajustes" para melhorar o desempenho de algo. É o que ocorre quando você calibra os pneus do seu carro, você quer que eles estejam com a pressão certa para tirar o melhor proveito deles. Quando você sintoniza em uma estação, você quer um som sem interferências ou ruídos, você quer que ele esteja afinado com a onda desejada.

 

Na área de informática, são vários os aspectos que podem influenciar o desempenho de aplicações de banco de dados e conseqüentemente são vários os componentes que podem sofrer tuning, visando performance. O objetivo deste artigo é apresentar o Quem, Quando e Como do performance tuning.

 

1 Introdução

 

O termo performance, ou desempenho, como preferir, é uma palavra-chave quando se fala em aplicações de banco de dados, pois não só se quer obter resultados confiáveis, como é necessário que os mesmos sejam oferecidos em tempo hábil. Com o desenvolvimento das novas tecnologias de computador, os sistemas se tornaram mais complexos. Mais dados precisam ser gerenciados, consultas mais complexas precisam ser processadas, características para a utilização de redes de computadores devem ser incorporadas às aplicações, fazendo com que os problemas de performance tornem-se mais freqüentes.

 

No entanto, melhorar o desempenho de uma aplicação nem sempre é uma tarefa fácil, pois as atividades de tuning de banco de dados envolve todos os componentes do sistema computacional, ou seja, hardware, SGBD, sistema operacional e aplicações. Fazer tuning nestes componentes pode implicar em alterar a forma como as aplicações são construídas, a configuração de parâmetros do SGBD, do sistema operacional e do hardware. Pode-se ainda fazer o tuning individualmente ou em conjunto, gerando-se, assim, novas possibili-dades para o modelo de performance ideal. Lembra do pneu do carro? pois é, não basta apenas calibrá-los para que seu carro tenha um bom desempenho, existem vários outros fatores que podem interferir no desempenho dele.

 

Outro aspecto que dificulta a atividade de tuning é a necessidade de um profissional com bom conhecimento sobre o estado de cada um destes componentes, o tuner (ah!, agora sim está se falando de tuner). Pode-se dizer que a qualidade dos resultados obtidos no tuning de aplicações é diretamente proporcional ao conhecimento que o tuner tiver sobre a atividade de tuning. Devido à falta de informação sobre como fazer tuning em uma aplicação, alguns tuners aumentam a performance de seus sistemas através da aquisição de equipamento adicional. Esta, no entanto, pode não ser a solução mais correta, pois nem todos os problemas de performance estão relacionados com a saturação da plataforma de hardware. O problema pode estar em outro ponto do sistema, como por exemplo, na aplicação, no SGBD e no sistema operacional, e nesses casos, a compra de equipamento adicional pode significar apenas uma solução provisória e cara. O tuner deve buscar aumentar a performance do sistema a partir do adequado gerenciamento dos recursos disponíveis na organização, optando por ampliar a plataforma quando esta for de fato a melhor solução. Isso vale para o carro. Os ajustes nele vão ter o resultado proporcional à capacidade, por exemplo, do seu mecânico.

 

2 O que é performance tuning?

 

Para os propósitos deste artigo, vamos considerar duas medidas de performance: o throughtput (volume de tarefas concluídas por unidade de tempo, geralmente medido em transações por segundo - tps, mas pode ser por minuto, hora, dia, etc.) e o tempo de resposta. Vamos considerar uma aplicação online transaction processing (OLTP) - onde deve-se processar milhares ou mesmo milhões de pequenas transações por dia - cuja necessidade é aumentar o throughtput e reduzir o tempo de resposta, desta forma mais consultas podem ser processadas, na unidade de tempo, e menor será o tempo que os usuários deverão esperar para obter os resultados das mesmas. Esta atividade de melhorar o desempenho de uma aplicação, conforme a sua necessidade, é chamada de per-

 

formance tuning.

 

Aplicações decision support System (DSS) definem sua performance em termos de tempo de resposta. Os objetivos para tuning variam. Eles dependem das necessidades da aplicação.

3 Quem deve ser o responsável pela atividade?

Como dito anteriormente, o tuning é uma atividade bem abrangente, de modo que todos os envolvidos com o sistema têm uma responsabilidade no tuning.

 

Isso significa que tanto administradores de banco de dados quanto administradores de sistemas e desenvolvedores de aplicação devem participar do processo, algumas vezes atuando de forma independente, outras em conjunto. O tuning torna-se muito mais fácil e rápido quando cada um cumpre o seu papel no processo, há comunicação e documentação das características do sistema.

Figura 1: Quem faz tuning

  • Os clientes devem definir e reexaminar as regras e procedimentos do negócio para proporcionar um modelo claro e adequado para o projeto da aplicação. Eles devem identificar os tipos específicos de regras e procedimentos que podem influenciar o desempenho do sistema como um todo.
  •  

 

  • Os projetistas da aplicação devem projetar evitando potenciais problemas de gargalos. Eles devem repassar o projeto do sistema de forma que todos possam entender o fluxo de dados da aplicação.
  •  

 

  • Os desenvolvedores devem repassar a estratégia de implementação que eles selecionaram de forma que módulos e declarações SQL possam ser rápida e facilmente identificadas durante o tuning.
  •  

 

  • Os administradores de banco de dados (DBAs) devem cuidadosamente monitorar e documentar as atividades do sistema de forma que possam ser identificados e corrigidos os desempenhos não usuais.
  •  

 

  • Administradores de hardware e software devem documentar e comunicar a configuração do sistema de forma que todos possam projetar e administrar o sistema efetivamente.
  •  

 

Projetistas, fabricantes, mecânicos, você como motorista...todos têm um papel importante no desempenho do seu carro.

4 Quando iniciar o tuning?

Geralmente o tuning é realizado durante a fase de aceitação do sistema, quando os problemas de performance são mais visíveis. No entanto, o ideal é que o mesmo seja realizado em todas as fases, pois muitos dos problemas de performance são decorrentes de decisões inadequadas já no início do projeto, que se refletem nas demais fases.

 

Fazendo-se o tuning em cada uma das fases, pode-se determinar com antecedência as necessidades de software e hardware para a aplicação (fase de planejamento), projetar um modelo de dados mais eficiente (fases de análise e projeto), decidir por estratégias para o controle de concorrência mais adequadas às necessidades de cada aplicação (fase de implementação). Com isso, vários problemas de performance podem ser evitados.

 

Aqui vale aquele ditado "Melhor prevenir do que remediar". A ilustração abaixo mostra a relação de custo do tuning durante a vida da aplicação.

Figura 2: Custo do tuning durante a vida de uma aplicação

 

A próxima figura mostra que os benefícios do tuning em uma aplicação durante o decorrer da sua vida é inversamente proporcional ao custo despendido.

Figura 3: Benefícios do tuning durante a vida de uma aplicação

 

Uma consideração importante é: independente se você está projetando ou dando manutenção no sistema, você deve estabelecer especificamente as metas de performance de forma que você possa saber QUANDO fazer tuning. Você pode perder tempo fazendo tuning no seu sistema se você alterar os parâmetros de inicialização ou os comandos SQL sem uma meta específica.

 

Tuning é geralmente uma série de compromissos entre custos e benefícios. Uma vez que você identificou o gargalo (porção do sistema que limita a performance), você pode ter de sacrificar os recursos de um outro sistema para alcançar os resultados desejados. Por exemplo, se o problema está no I/O, você pode necessitar da compra de mais memória ou mais disco. Se a aquisição não é possível, você pode ter de limitar a concorrência do sistema para alcançar a performance desejada. No entanto, com metas de performance bem definidas, a decisão sobre qual recurso "abandonar" em troca de uma melhora de performance é mais simples porque você tem identificadas as áreas mais importantes.

 

5 Como sintonizar?

 

Como os problemas de performance podem estar em qualquer ponto do sistema e como muitos destes problemas estão relacionados às características específicas de cada aplicação, é difícil propor um modelo genérico de tuning. Até porque existem muitas ferramentas específicas que podem auxiliar na tarefa de tuning. Para o artigo, vamos falar do COMO, apresentado o método recomendado para tuning em banco de dados Oracle. Mas antes, vamos colocar duas recomendações importantes que independem do tipo de banco de dados.

 

Primeiro: definir objetivos. Nunca comece o tuning sem ter primeiro estabelecido objetivos claros: você pode não ter sucesso sem a definição do que será o "sucesso". "Faça ele ser o mais rápido possível" pode soar como um objetivo, mas é muito difícil determinar se ele foi atingido ou não. Portanto, assim como definir os objetivos de performance, definir claramente os objetivos a serem alcançados pelo tuning é o primeiro passo para se obter bons resultados. Os objetivos devem estar relacionados com as necessidades da organização e podem ser, por exemplo, aumentar a performance de uma consulta SQL, de uma aplicação de banco de dados específica ou de todo o sistema. A vantagem de defini-lo está no fato de que eles servem como um guia, ou seja, direcionam todo o processo de tuning. Além disso, são essenciais para auxiliar na decisão de aumentar a performance de um componente do sistema em detrimento de outro, quando estes são conflitantes.

 

Segundo: evite os erros comuns. Um erro comum feito por tuner inexperiente é apegar-se a noções preconcebidas sobre o que pode estar causando o problema. Outro erro muito comum é tentar várias soluções de forma aleatória. Cuidado também em mudar alguma coisa no sistema por "achometro". Ou, uma vez que você tenha uma hipótese que você não tenha certeza ou não pensou detalhadamente, você pode ficar tentado a implementar isso globalmente. Fazendo isso de forma apressada, pode-se, em vez de melhorar, causar degradação da performance do sistema.

 

Vamos ao COMO. Os passos seguintes fornecem um método recomendado para o tuning de bases de dados Oracle. Esses passos estão ordenados em ordem decrescente de benefícios: passos com o maior efeito no desempenho aparecem primeiro. Para um resultado ótimo, portanto, resolva problemas de tuning na ordem listada: começando com as fases de projeto e desenvolvimento até o tuning de instância.

 

 

Passo 1: Faça tuning nas Regras de Negócio.

Passo 2: Faça tuning no Projeto dos Dados.

Passo 3: Faça tuning no Projeto da Aplicação.

Passo 4: Faça tuning na Estrutura Lógica do Bando de Dados.

Passo 5: Faça tuning nas Operações de Banco de Dados.

Passo 6: Faça tuning nos Caminhos de Acesso.

Passo 7: Faça tuning na Alocação de Memória.

Passo 8: Faça tuning no I/O e na Estrutura Física.

Passo 9: Faça tuning no Conflito de Recursos.

Passo 10: Faça tuning nas Plataformas nas quais o Banco é executado.

Após completar esses passos, reavalie o desempenho de seu banco de dados e decida se é necessário mais tuning.

 

O tuning é um processo iterativo. Os ganhos de desempenho conseguidos nos passos finais podem abrir caminho para melhoramentos em passos iniciais. Portanto, passagens adicionais por todo o processo de tuning podem ser úteis.

 

Figura 4: O método para tuning

 

Decisões feitas em um passo podem influenciar os subseqüentes. Por exemplo, no passo 5 você pode reescrever algumas de suas declarações SQL. Essas declarações SQL podem ter impacto significativo nas questões de parsing e caching abordadas no passo 7. Mais ainda, o I/O de disco, que é ajustado no passo 8, depende do tamanho do buffer cache, que é ajustado no passo 8. Embora a figura pareça um loop que volta ao passo 1, você pode precisar retornar de qualquer passo para qualquer outro anterior.

 

  • Passo 1: Faça tuning nas Regras de Negócio

 

Para uma ótima performance, pode ser necessário adaptar as regras do negócio. Isto diz respeito à análise e projeto do sistema como um todo. Questões de configuração são consideradas neste nível, tais como usar ou não um servidor multi-threaded para todo o sistema. Desta maneira, os projetistas asseguram que os requisitos de desempenho do sistema correspondem diretamente às necessidades concretas do negócio.

 

Problemas de desempenho encontrados por um DBA podem na verdade ser causados por problemas de projeto e implementação, ou por regras de negócio inapropriadas. Algumas vezes os projetistas fornecem uma quantidade de detalhe que é muito maior do que é necessário quando eles escrevem as funções de negócio para uma aplicação. Eles documentam uma implementação, em vez de apenas a função que precisa ser realizada.

 

Regras de negócio devem ser consistentes com expectativas realistas sobre o número de usuários simultâneos, sobre o tempo de resposta das transações, e sobre o número de registros armazenados online que o sistema pode suportar. Por exemplo, não faria sentido executar uma aplicação altamente interativa em uma WAN lenta.

 

  • Passo 2: Faça tuning no Projeto dos Dados

 

Na fase de projeto dos dados, você determina que dados são necessários para suas aplicações. Você precisa considerar que relações são importantes, e quais são seus atributos. Finalmente, você precisa estruturar a informação de maneira a melhor atingir os objetivos de performance.

 

O processo de projeto do banco de dados geralmente passa por um estágio de normalização no qual os dados são analisados para eliminar redundâncias. Com a exceção das chaves primárias, qualquer elemento de dados deve ser armazenado apenas uma vez em seu banco de dados. Depois que os dados foram normalizados, contudo, pode ser necessário desnormalizá-los por razões de desempenho. Você pode, por exemplo, decidir que o banco de dados deve manter valores de sumário freqüentemente usados. Por exemplo, ao invés de forçar uma aplicação a recalcular o preço total de todas as linhas em um pedido qualquer a cada vez que ela é acessada, você pode decidir manter constantemente no banco de dados um número representando o valor total para cada pedido. Você poderia estabelecer índices de chave primária e de chave estrangeira para acessar essa informação rapidamente.

 

Outra consideração de projeto de dados é evitar disputa pelos dados. Considere uma base com tamanho de 1 terabyte da qual 1000 usuários acessam apenas 0,5% dos dados. Esse "hot spot" nos dados poderia causar problemas de desempenho.

 

Tente também localizar o acesso aos dados aos níveis de partição, processo e instância. Ou seja, localize o acesso aos dados de tal maneira que qualquer processo requisitando dados dentro de um conjunto em particular de valores esteja confinado a uma instância em particular. Conflitos começam quando vários processos remotos tentam simultaneamente acessar um conjunto de dados em particular.

 

No Oracle Parallel Server, procure os pontos de sincronização - qualquer ponto no tempo, ou parte de uma aplicação que deve ser executada seqüencialmente, um processo a cada vez. O requisito de ter números de ordem seqüencial, por exemplo, é um ponto de sincronização que resulta de um projeto pobre.

 

Também considere implementar dois aprimoramentos do Oracl8i que podem ajudar a evitar conflitos:

 

    • Considere a possibilidade de particionar os seus dados.

       

       

    • Considere a possibilidade de usar índices locais ou globais.

     

 

  • Passo 3: Faça tuning no Projeto da Aplicação

 

Clientes e projetistas de aplicações devem traduzir os objetivos do negócio em um projeto efetivo de sistema. Processos de negócio dizem respeito a uma aplicação particular dentro de um sistema, ou uma parte em particular de uma aplicação.

Um exemplo de projeto de processo inteligente é cachear estrategicamente os dados. Por exemplo, em uma aplicação de venda no varejo você pode selecionar a alíquota de imposto uma vez no início de cada dia, e cacheá-la dentro da aplicação. Desta maneira você pode evitar a recuperação da mesma informação repetidamente durante o dia.

 

Neste nível, você pode também considerar a configuração de processos individuais. Por exemplo, alguns usuários de PC’s podem acessar o sistema central usando agentes móveis, e outros podem estar conectados diretamente. Embora eles estejam executando o mesmo sistema, a arquitetura para cada tipo de usuário é diferente. Eles podem precisar de diferentes mail servers e diferentes versões da aplicação.

 

  • Passo 4: Faça tuning na Estrutura Lógica do Banco de Dados

Depois que a aplicação e o sistema foram projetados, você pode planejar a estrutura lógica do banco de dados. Isto diz respeito principalmente ao fine-tuning do projeto dos índices, para garantir que os dados não serão nem sobre nem subindexados. No estágio de projeto de dados (Passo 2) você determina os índices de chave primária e de chave estrangeira. No estágio de projeto da estrutura lógica você pode criar índices adicionais para apoiar a aplicação.

 

Problemas de desempenho devido a conflitos com freqüência envolvem inserts no mesmo bloco ou o uso incorreto de números de seqüência. Tenha um cuidado especial no projeto, uso e localização de índices, bem como no uso de geradores de seqüência e clusters.

 

  • Passo 5: Faça tuning nas operações de banco de dados

 

Antes de fazer o tuning do Oracle server, esteja certo de que sua aplicação tira plena vantagem da linguagem SQL e das características Oracle projetadas para aprimorar o processamento de aplicações. Use características e técnicas tais como as seguintes, baseado nas necessidades de sua aplicação:

    • Processamento de array
    • Oracle optimizer
    • Gerenciador de lock em nível de linha
    • PL/SQL

     

 

A compreensão dos mecanismos de processamento de queries do Oracle também é importante para a criação de declarações SQL efetivas.

 

  • Passo 6: Faça tuning nos caminhos de acesso

 

Assegure-se de que o acesso aos dados é eficiente. Considere o uso de clusters, hash clusters e índices B*-tree e bitmap.

 

Assegurar acesso eficiente pode também significar a adição de índices, ou a adição de índices para uma aplicação em particular e então removê-los. Pode também significar a reanálise de seu projeto após a construção do banco de dados. Você pode desejar normalizar mais os seus dados, ou criar índices alternativos. Ao testar a sua aplicação, você pode descobrir que ainda não está obtendo o tempo de resposta necessário. Se isto acontecer, procure mais maneiras de melhorar o projeto.

 

  • Passo 7: Faça tuning na Alocação de Memória

 

A alocação apropriada de recursos de memória às estruturas de memória do Oracle pode ter um efeito positivo no desempenho.

 

A memória compartilhada do Oracle8i é alocada dinamicamente para as seguintes estruturas, as quais são parte do pool compartilhado. Embora você possa explicitamente configurar a quantidade total de memória disponível no pool compartilhado, o sistema configura dinamicamente o tamanho de cada estrutura contida dentro dele:

 

    • Cache do dicionário de dados
    • Cache da biblioteca
    • Áreas de contexto (se executando em um servidor multi-thread)

     

 

Você pode explicitamente configurar a alocação de memória para as seguintes estruturas:

 

    • Cache de buffer
    • Buffer de log
    • Caches de seqüência

     

 

A alocação apropriada dos recursos de memória melhora o desempenho do cache, reduz o parsing de declarações SQL, e reduz a paginação e o swapping.

 

Áreas locais de processo incluem:

 

    • Áreas de contexto (se executando em um servidor multi-thread)
    • Áreas de sort
    • Áreas de hash

     

 

Tenha cuidado em não alocar para a área global de sistema (SGA) uma porcentagem tão grande da memória física da máquina que venha a causar paginação ou swapping.

 

  • Passo 8: Faça tuning no I/O e na estrutura física

 

I/O de disco tende a reduzir o desempenho de muitas aplicações. O Oracle server, contudo, é projetado de maneira que seu desempenho não precisa ser indevidamente limitado por I/O. O tuning de I/O e da estrutura física envolve estes procedimentos:

 

    • Distribuir os dados de maneira que I/O também esteja distribuído, para evitar conflito de disco.
    • Armazenar os dados em blocos para melhor acesso: configurando um número adequado de listas livres e usando valores apropriados para PCTFREE e PCTUSED.
    • Criar espaços grandes o suficiente para seus dados de maneira a evitar a ampliação dinâmica de tabelas; isto iria afetar negativamente o desempenho de aplicações OLTP de alto volume.
    • Avaliar o uso de raw devices.
  • Passo 9: Faça tuning no conflito de recursos

O processamento concorrente por múltiplos usuários Oracle pode criar conflitos por recursos. Os conflitos podem fazer com que os processos tenham de esperar até que os recursos estejam disponíveis. Tenha cuidado em reduzir os seguintes tipos de conflitos:

    • Conflito de bloco
    • Conflito de pool compartilhado
    • Conflito de lock
    • Pinging (em ambiente de servidor paralelo)
    • Conflito de latch

  • Passo 10: Faça tuning nas plataformas nas quais o banco é executado

Verifique na sua documentação Oracle as maneiras de fazer o tuning para a plataforma no qual o banco está sendo executado. Por exemplo, em sistemas Unix você pode querer fazer o tuning do seguinte:

    • Tamanho do buffer de cache do Unix
    • Gerenciadores de volumes lógicos
    • Tamanho e memória para cada processo.

6 Quando parar o tuning?

Uma das maiores vantagens de se ter objetivos de tuning é que ele torna possível definir o seu sucesso. A partir de um certo ponto, os ganhos de performance podem ser muito pequenos, não justificando o esforço necessário para consegui-los. A necessidade de manter o tuner dedicado a esta tarefa de forma exclusiva, evitando com isso que ele realizem outras atividades que podem ser mais produtivas se comparadas aos resultados a serem obtidos por esta monitoração exaustiva, é outra razão para se parar o tuning. Mas o monitoramento deve ser constante para manter o nível de performance alcançado e, uma vez alcançados os objetivos, o tuner deve demonstrar isso a duas comunidades:

    • Aos usuários afetados pelo problema
    • A todos aqueles responsáveis pelo sucesso da aplicação.

7 Conclusão

Como se viu, a atividade de tuning é essencial para o bom desempenho das aplicações de banco de dados. Além de permitir um aumento na produtividade global do negócio, a partir da satisfação do usuário, permite que os recursos computacionais disponíveis sejam melhor aproveitados. A maior dificuldade do tuning está no fato de que são vários os aspectos que influenciam a performance e que podem ser ajustados.

 

O papel do tuner é muito importante para o sucesso de todo o processo. Assim, quanto maior o conhecimento que o mesmo tiver a respeito da aplicação e de todo o sistema computacional, melhor será o resultado obtido.

Então, repetindo a pergunta inicial: Você é um tuner? Se você não é ou não sabe se é, cuidado!!! suas atividades podem estar comprometendo o desempenho de muitas aplicações.

Referências

[1] ORACLE. Oracle8I tuning: introduction to Oracle performance tuning. Disponível em: <http://technet.oracle.com/doc/server.815/ a67775/toc.htm>. Acesso em: fev. 2000.

[2] _____. Oracle8I tuning: performance tuning methods. Disponível em: <http://technet.oracle.com/doc/server.815/ a67775/toc.htm>. Acesso em: fev. 2000.

[3] SYBASE. The Enterprise Client/Server Company: performance & tuning v. 2.0. U.S.A, 1994. vol. 1, módulo 1.

[4] VICARI, S. R. Database tuning: aspectos de implementação de banco de dados que influenciam a performance de aplicações. 1995. Dissertação (Pós-Graduação em Ciência da Computação) - Instituto de Informática, Universidade Federal do Rio Grande do Sul, Porto Alegre,1995.