Fonte: www.activedelphi.com.br
Melhorar a performance das aplicações Oracle depende também
da forma com que você utiliza o banco e da arquitetura do servidor. Veja
algumas técnicas interessantes...
UTILIZE ARRAY NA
ESTRUTURA DE STORAGE DO SERVIDOR
Bancos de dados, conceitualmente, utilizam intenso acesso à
discos. Por esta razão e não só para o armazenamento de grandes massas de
dados, os principais fabricantes de hardware disponibilizam unidades de
"storage" de alto desempenho para serem integradas à servidores de
dados.
Estas unidades SCSI utilizam um conceito extremamente
moderno de "arrays" de disco, que são na verdade
"condomínios" estruturados para conjugar diversos discos com o
objetivo de ganhar segurança no armazenamento e performance no acesso para
leitura e gravação.
Quanto maior a quantidade de discos, independentemente do
seu tamanho, maior a possibilidade de performance. As controladoras de
"array" permitem, inclusive, que se possa balancear segurança e
performance, que são inversamente proporcionais.
Isso, por si só, não quer dizer que uma estrutura de
"storage" super-dimensionada elimine a necessidade de um processador
adequado ou de uma quantidade de memória física condizente com a utilização do
equipamento. Pelo contrário, a questão "storage" precisa estar
resolvida para que se possa planejar o processador e a quantidade de memória
física necessários.
É comum em servidores com problemas de contenção de discos
(fila de trabalho causada pela sobrecarga na utilização do
"storage"), que o processador e a memória física sejam
sub-utilizados, porque como a atividade está aguardando liberação do
"storage", o processador e a memória acabam sendo requisitados pela
velocidade em que a fila vai sendo liberada, muito abaixo do necessário.
É algo como olharmos o trânsito na saída do pedágio da
Imigrantes num feriado de carnaval por exemplo. Antes do pedágio, dezenas de
quilômetros de congestionamento. Após o pedágio,se existirem 10 postos de
arrecadação, saem 10 veículos por vez... Se existirem 20 postos, saem 20
veículos por vez...
Quanto menos postos de arrecadação, mais a fila cresce
potencialmente. O numero de postos de arrecadação corresponderia, numa
analogia, ao número de discos do array.
Quanto mais lenta a liberação da fila, menos a estrada
depois do pedágio (processador e memória física) é requisitada, a despeito dos
quilômetros de congestionamento antes do pedágio...
Nestes casos, assim que se resolve o problema do
"storage", ficam evidentes eventuais problemas de processador e de memória.
PADRONIZE AS
DECLARACÕES SQL AO MÁXIMO
O Oracle trabalha todas as requisições de usuário na SGA
(System Global Área), que é um pedaço da memória do servidor reservado para uso
exclusivo do banco de dados.
Dentro da SGA, entre outras, o Oracle mantém uma área para
compartilhamento de SQL, também chamado "pool compartilhado". Todas
as declarações SQL são executadas dentro desse "pool".
Quando recebe uma declaração SQL, antes de carregá-la no
"pool" o banco verifica se ela já existe. Se existir, a declaração já
existente é executada. Isso aumenta a performance na resposta da declaração
SQL. Desta forma, fazer várias declarações SQL idênticas, mas escritas de forma
diferente, impede o banco de procurar respostas mais rápidas. Por exemplo:
SELECT * FROM CLIENTES WHERE CODIGO = 10;
Não é igual a
Select * from clientes where código = 10;
Se ambas as declarações forem escritas de forma idêntica, o
tempo de resposta da segunda será menor. Agora imagine quantas vezes isso
acontece dentro da sua aplicação. Percebeu quanto tempo pode ser economizado?
CRIE TABELAS DE
ELEVADO CRESCIMENTO EM DATAFILES SEPARADOS
As tabelas da sua aplicação que potencialmente forem crescer
muito rápido, isto é, tiverem uma elevada taxa de crescimento, você deve criar
em DATAFILES separados, ou até mesmo em TABLESPACES separadas se preferir.
Isso irá diminuir consideravelmente a fragmentação das
informações, e conseqüentemente melhorar a performance.
UTILIZE CORRETAMENTE
ÍNDICES
A adequada utilização de índices contribui consideravelmente
para melhorar o tempo de resposta das consultas SQL. Ao criar um índice, você
dá ao banco a oportunidade de não ter que procurar informações na tabela
inteira (operação chamada de "full scan") e de encontrá-las mais rapidamente
através das estruturas dos índices.
Assim você deve criar índices:
- para indexar as colunas utilizadas nas cláusulas WHERE ou
AND de uma declaração SQL;
- para indexar colunas que se referenciam a chaves-primárias
de outras tabelas, ou seja, utilizadas em constraints foreign key;
Aqui uma consideração importante que você provavelmente vai
ter dificuldade de encontrar em literaturas, mas que vivemos muito na
"vida real".
O Oracle tem muita dificuldade em resolver através de
índices a condição <> (diferente de). Assim, evite ao máximo usar esta
condição em SELECTS que envolvam tabelas potencialmente grandes.
Nenhum comentário:
Postar um comentário