|
|
.NET, C#, Oracle, Web, tecnologia em geral e diversidades.
|
|
|
|
BOAS PRATICAS DE PROGRAMAÇÃO PLSQL
Como nem todo mundo tem acesso ao GPO - Grupo de Profissionais Oracle, então eu decidi trazer este artigo do Haysar Alfredo Conte Maluf Lelis, para o pessoal do The Spoke!
BOAS PRATICAS DE PROGRAMAÇÃO PLSQL - PARTE 1Ola
!!! Estou enviando este artigo de "Boas Praticas de programação PL/SQL"
ou seja, são alguns assuntos que acho interessante e uso no meu
dia-a-dia. Estes tópicos são algumas dicas de como programar ou
melhorar a programação. Espero que gostem e se possível mandem algumas dicas para incrementar meu artigo...
1 - Introdução Problemas
com aplicações de baixa performance podem estar freqüentemente
relacionados a consultas SQL mal estruturadas ou a um design de banco
de dados ineficiente. A metodologia e tuning da Oracle,
tradicionalmente é focada no design da aplicação e no tuning de
consultas SQL antes mesmo de analisar quaisquer tipos de problemas
relacionados à configuração do banco de dados. A otimização de uma
consulta constitui em determinar a melhor estratégia para executá-la no
banco de dados. O otimizador do Oracle escolhe, por exemplo, se usará
um índice ou não para uma consulta especifica e que técnicas de JOIN
usar na junção de múltiplas tabelas. Estas decisões têm um impacto
muito grande na performance de um SQL e por isso a otimização de uma
consulta é essencial para qualquer aplicação e de extrema importância
para a performance de um banco de dados relacional. É muito
importante que os desenvolvedores conheçam o otimizador do Oracle como
também os conceitos relativos à tuning. Tal conhecimento irá ajudar a
escrever consultas muito mais eficientes e rápidas. A proposta deste
artigo é justamente fornecer uma base teórica e pratica dos principais
conceitos relativos a tuning para que você já comece a escrever SQLs
muito mais rápidos.
2 - SQL Performance e Tuning 2.1 - Conheça bem a aplicação como os dados contidos nela. Informações
idênticas quase sempre podem ser encontradas em diferentes fontes de
dados. Se familiarize com estas fontes; você deve estar atento ao
volume e a distribuição destes dados no banco de dados. Você também
deve ter um profundo conhecimento do seu modelo de dados, como o
relacionamento entre as entidades de negócios, antes de escrever seu
SQL. Este entendimento vai ajudar a escrita de consultas mais
eficientes para retirar dados de múltiplas tabelas.
2.2 - Entenda o Otimizador O
otimizador determina a maneira mais eficiente de se rodar um SQL. Para
executar qualquer SQL o Oracle tem que derivar um "plano de execução".
O plano de execução de uma consulta é uma descrição de como o Oracle
irá implementar a recuperação dos dados para satisfazer a um
determinado SQL. Desde a versão 7 até a 9 o Oracle possui dois
otimizadores que serão descritos a seguir:
2.2.1 - Otimizador Baseado em Regra (Ruled Based Optimizer - RBO) O
RBO utiliza uma série de regras rígidas para determinar um plano de
execução para cada SQL. Se você conhecer as regras você pode construir
uma consulta SQL para acessar os dados da maneira desejada. O RBO não
está sendo mais aperfeiçoado e foi descontinuado pela Oracle só sendo
suportado até o Oracle 9i.
2.2.2 - Otimizador Baseado em Custo (cost Based Optimizer - CBO) Introduzido
no Oracle 7, o CBO tentar achar o plano de execução que possui o menor
custo para acessar os dados tanto para uma quantidade de trabalho
especifica como para um tempo inicial de resposta mais rápido. Os
Custos de diferentes planos são calculados e a opção que apresentar o
menor custo de execução é escolhida. São coletadas estatísticas
referentes às tabelas do banco de dados e estas são usadas para
determinar um plano de execução ótimo. O CBO não entende as
características relacionadas a uma aplicação, como também não pode
entender completamente o impacto de relacionamentos complexos nos joins
de algumas tabelas. Ele apenas possui uma fonte de informações
limitadas, baseada em estatísticas, para determinar o melhor plano de
execução para cada consulta. Como o CBO assume alguns valores relativos
ao custo, o plano escolhido pode não ser necessariamente o melhor plano
de execução. Portanto você deve estar sempre preparado para otimizar
estes SQLs em busca do plano ótimo quando preciso.
2.3 - Entenda o que é seletividade A
seletividade é a primeira e mais importante medida do Otimizador
Baseado em Custo. Ela representa uma fração de linhas de um conjunto
resultante de uma tabela ou o resultado de um "join" ou um "group by".
O CBO utiliza estatísticas para determinar a seletividade de um
determinado predicado (clausula where ou having). A seletividade é
diretamente ligada ao predicado da consulta como ID = 1245, ou uma
combinação de predicados, como ID = 1245 AND STATUS=A. O propósito do
predicado de uma consulta é limitar o escopo dela a um certo número de
linhas em que estamos interessados. Portanto, a seletividade de um
predicado indica quantas linhas de um conjunto vão ser filtradas por
uma determinada condição. A seletividade varia numa faixa de valores
de 0.0 até 1.0 onde a seletividade de 0 indica que nenhuma linha será
selecionada e 1 que todas as linhas serão selecionadas. A seletividade
é igual ao numero de valores distintos que uma coluna possui. (1/NVD
onde NVD significa o Numero de Valores Distintos). Haysar Alfredo Conte Maluf Lelis - DBAhaysar@gmail.com
|
|
|
|