[ RDBMS ]

Otimização de Aplicações ORACLE 

As partes de otimização de aplicativos pode parecer insignificantes sozinha. Em conjunto, cada componente do processo é um contribuinte importante.

Quando o Oracle roda, ele recebe pedidos de dados dos usuários. Os dados ficam em diversos arquivos de dados no disco. Não há comunicação direta entre o banco de dados e os usuários. Todas as leituras, gravações e alterações dos dados passam através das estruturas de memória do Oracle. Isso aumenta a importância de usar a memória eficientemente.

O Oracle mantém uma área de SQL compartilhada na memória, também referida como pool compartilhado. Todas as declarações SQL são executadas nesse pool. Quando uma declaração SQL é passada para o Oracle, antes de carregá-la nesse poll, o Oracle procura aí uma declaração idêntica. Se ele encontrar uma combinação, a nova declaração é descartada, e a que já está no pool é executada em seu lugar. À preparação para a execução e a colocação no pool compartilhado, nos referimos como fase de preparação.

A leitura de informações do dico é referida como acesso a disco. Minimizar o acesso a disco é importante, dadas as operações que o computador executa quando lê no disco. Ele perde tempo para posicionar o leitor sobre o ponto exato no disco em que residem os dados, e o tempo para transferi-los para a memória pode se tornar BASTANTE significativo.

Como minimizar o acesso a disco ...?

Índice

Onde usar índices é uma decisão difícil. O uso de índices contribui para o processo de otimização de aplicativo. Os índices são estruturas opcionais mantidas pelo Oracle que fornece acesso rápido a seus dados. Ao criar um índice, você especifica o nome da tabela e uma ou mais colunas a controlar. Uma vez criado um ídice, o Oracle o mantém automaticamente quando os dados são criados, alterados e eliminados de suas tabelas. As regras a seguir é, uma tentativa de ajudar na decisão de criação de índices :
 CREATE INDEX nome_do_indice ON nome_da_tabela (coluna1, coluna2, coluna3,...);

Pool compartilhado

Quando as declarações SQL são passadas para o Oracle para processamento, o segredo é reutilizar uma declaração que já esteja no pool em vez de obrigá-lo a preparar cada nova declaração que recebe. O Oracle reutiliza as declarações do pool compartilhado se ele receber uma que seja idêntica a uma outra que já esteja no pool. Para tanto precisa-se definir convenções de codificação, uma vez adotada uma convenção, você pode começar a codificar declarações SQL para tirar proveito das que já estão no pool compartilhado.

Projete suas conveções de codificaça (ou utilize as descritas abaixo). Passar declarações para processamento idênticas às que já estão no pool ajuda a otimizar seus aplicativos.

1 - Use uma linha para cada parte da declaração SQL. Alinhe a primeira palavra-chave de cada linha com a palavra-chave da seguinte.

 SELECT  nome, endereco, sexo
   FROM  bolsista
  WHERE  cod_id = id
  GROUP BY sexo
  ORDER by nome;
2 - Definir padrão de caracteres para as palavras especias e para as demais.
 SELECT  nome, endereco, sexo
   FROM  bolsista
  WHERE  cod_id = id
  GROUP BY sexo
  ORDER by nome;
3 - Coloque vírgulas ao lado do texto e deixe um espaço depois.
 SELECT col1, col2, SUM(col3) ...
4 -Quando uma vírgula é o último caracter de uma linha, coloque-a nessa linha em vez de pular para próxima e depois inserir a vírgula.
 SELECT col1, col2
       ,col3

 Preferir este modo :

 SELECT col1, col2,
        col3
5 - Identação de colunas.
  SELECT col1, col2, col3, SUM(col4, conl5, col6, col7,
           col8, col9, col10
6 - Quando você tem o WHERE seguido de uma ou mais linhas começadas com AND , realizar alinhamento.
  WHERE
    AND
    AND
    AND
    AND
7 - Não deixe espaços ao lado de parênteses quando eles aparecem em declarações SQL.
  SELECT col1, col2, SUM(col3)
8 - Deixe um espaço nos dois lados dos operadores usados nas declarações SQL.
  WHERE x = y
    AND f = a
    AND t = z

Estratégia : Baseada em Regra ou Baseada em custo

A otimização avançada de aplicativos exige um entendimento de como o Oracle otimiza declarações SQL. O Oracle usa uma de duas estratégias para fazer isso. Na estratégia baseada em regra, o Oracle gradua a eficiêencia do caminho de acesso aos dados com base em um conjunto de regras. Na estratégia baseada em custo , que é o padrão do Oracle7, o Oracle examina os dados de uma ou mais tabelas na declaração SQL e seleciona o caminho de acesso que custará menos (isto é o menor número de recursos e menor quantidade de tempo).

Estratégia Baseada em Regra

O Oracle gradua os caminhos de acesso com um peso de 1 a 15 e depois escolhe o caminho de acesso de graduação mais baixa.

Graduação 1 - Este caminho está disponível quando a palavra-chave WHERE iguala o rowid com um único valor.

  SELECT *
    FROM bolsa
   WHERE rowid = `005A3.0012.089F`;
Nas declarações SQL geralmente não se conhece o rowids, de modo que esse caminho não é usado explicitamente com muita frequência.

Graduação 4 - Este caminho está disponível quando todas as coluas de uma chave exclusiva ou principal são referenciadas por sua declarações de igualdade.

 Coluna            Parte da chave principal
  nome                    SIM
  telefone                SIM
  cidade                  NÃO

SELECT  *
  FROM  dados
 WHERE  nome   = `FRANK`
   AND  cidade = `BRASILIA`;
Este exemplo poderia tirar proveito desse caminho de acesso, todas as colunas da chave principal são mencionadas no where/and e são comparadas usando igualdade.

Graduação 8 - Se a cláusula where da declaração mencionar todas as colunas em um índice composto e executar comparações de igualdade, esse caminho de acesso será usado.

Graduação 9 - Esse caminho de acesso é usado se a parte where/and da declaração SQL utilizar um ou mais índices de coluna simples. Se mais de um índice de coluna simples é usado, as condições devem ser conectadas com and.

Graduação 15 - A varredura total da tabela é usada para toda declaração SQL que não satisfaz os critérios de outros caminhos de acesso graduados.Cada registro da tabela é lido sequencialmente; aqueles que se qualificam em todos os critérios são escolhidos, e os demais são descartados.

Estratégia Baseada em Custo

Ao usar a estratégia baseada em custo, o Oracle otimiza uma declaração SQL para custar o mínimo. Este custo é uma media de quanto tempo o Oracle acha que demorará para processar a declaração SQL. Ele tem por base fatores como o número de linhas em cada tabela e o número de valores distintos nas colunas das mesma. A estratégia baseada em custo estima as E/Ss que serão executadas com base na seleção de caminhos de acesso disponíveis e depois tenta encontrar o caminho de E/S menos dispendioso.

Para usar essa estratégia, você deve reunir estatísticas a serem examinadas pelo otimizador baseado em custo ao selecionar o caminho de acesso aos dados, durante a determinação do plano de execução. Você reúne estatísticas manualmente usando o comando analyze em tabelas, índices ou clusters.

Lembre-se que, se você quer usar a otimização baseada em custo e não reunir estatísticas manualmente, o Oracle as estimará durante a fase de análise de cada nova declaraçã SQL. Essa é uma situação indesejável - essa reunião em andamento pode consumir tempo.

 analyze table bolsa estimate statistics;
 analyze table bolsa estimate statistics sample 35 percent;
 analyze table bolsa compute  statisticas;
comput calcula as estimativas exatas, mas demora mais tempo.
estimate usa um percentual aleatório ou um percentual definido por você.

Em um banco com muita concorrência, recomenda-se a execução de analises diárias. Você deve definir a melhor forma de atualização das suas tabelas de estatísticas.

Os resultados da análise são armazenados nas visões de dicionário de dados user_tables e user_indexs.

user_tables  user_indexes 
num_rows  number 
bloks  number 
empty_bloks  number 
avg_space  number 
chain_cnt  number 
avg_row_len  number 
 
bleavel  number 
leaf_blocks  number 
distinct_keys  number 
avg_leaf_blocks_per_key  number 
avg_data_blocks_per_key  number 
clustering_factor  number 
status  varchar2(11) 
 

 
 
 
 

Referência :


<=

http://www.absoluta.org      ---oOo---      verdade@absoluta.org

Copyright © 1998 - 1999  Verdade @bsoluta