Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como fazer o ajuste de sql no Oracle

Introdução ao Sql Tuning

  • As instruções SQL são escritas para recuperar /buscar dados do banco de dados. Queremos que nossa instrução sql seja executada rapidamente (ajuste sql) e forneça os resultados em segundos.
  • Um sql mal projetado pode desacelerar toda a operação do banco de dados e interromper toda a operação. É muito mais difícil escrever SQL eficiente do que escrever SQL funcionalmente correto. o ajuste de desempenho do sql pode melhorar significativamente a integridade e o desempenho de um sistema.
  • A chave para ajustar o SQL é minimizar os dados que ele acessa para fornecer o resultado. Podemos minimizar os dados que ele acessa para fornecer o resultado por meio do caminho de pesquisa ideal.

Um exemplo simples seria
select * from dept where emp=10
  • Agora esta consulta terá que pesquisar todo o departamento de tabela para descobrir os dados onde emp=10. Então ele tem que acessar a tabela completa
  • Agora, se criarmos o índice para a coluna emp, ele poderá acessar o índice e obter o resultado. Então aqui ele acessa menos dados

12 etapas para realizar o ajuste Sql no Oracle


Aqui as dicas gerais para ajuste de desempenho do SQL

(1) Primeiro você deve ter todas as ferramentas necessárias para o ajuste do sql. Você deve ter boas informações sobre rastreamento, formatação do rastreamento, plano de explicação, leitura do plano de explicação no oracle.
Bom conhecimento sobre os vários métodos de junção disponíveis no Oracle e como usá-los com eficiência

(2) Leia menos dados e seja eficiente em E/S.
Quanto mais dados você lê para a instrução sql, mais travas ela precisa adquirir e diminui o desempenho. por isso deve estar fazendo menos leituras lógicas sempre
Escreva uma instrução sql sensata onde os filtros adequados. Verifique o número de linhas em várias tabelas envolvidas e descubra o melhor método para criar a instrução sql

(2) Use bons índices Oracle
Os índices B-Tree e os índices Bitmap podem ser usados ​​para aumentar o desempenho das consultas se os dados retornados forem inferiores a 10%. Mas devemos ter cuidado ao criar o índice, pois ele também precisa ser mantido para a operação de inserção, atualização e exclusão. Portanto, criar um índice cria sobrecarga em muitas coisas. Portanto, devemos examinar cuidadosamente o efeito da criação do índice.

(3) Evite o sql que desativa o uso do índice

SQL que desativa índices
(a)Funções ( to_char(), to_date(), etc. )
Correção:mova a função para o lado “constante/variável de ligação”
(b) Conversão de tipos
Em SQL
onde emp_no =10 (emp_no é um varchar2)
Em PL/SQL
onde emp_no =v_emp_num (v_emp_num é um número)
Modificadores
e id + 0 =111
e data + 1 =sysdate (tente data =sysdate – 1)
Correção:Altere para evitá-lo


(4) Sempre use a variável bind na aplicação. Se você não usar a variável de ligação no oracle , o sql será analisado todas as vezes e afetará o desempenho do banco de dados.

(5) UNIÃO vs OU. Use UNION para consultas com dois caminhos de execução claros; cada um retornando um número bastante pequeno de linhas. Não use união para consultas que provavelmente retornarão um grande número de linhas, pois todas as linhas precisam ser classificadas e a maioria delas será descartada. OR tende a desabilitar o índice

(6) Use as estatísticas precisas do otimizador na tabela para obter o plano ideal.

(7) Se você estiver usando função na expressão na condição, verifique se há um índice baseado em função nessa coluna. Se não estiver presente, o índice não será usado

(8) Use existe vs in e Inexiste vs not in para subconsultas correlacionadas

(9) Evite práticas de codificação ruins
Algumas dicas
(a) Evite junção cartesiana. Verifique se todas as tabelas necessárias nas consultas são necessárias e estão vinculadas umas às outras
(b) Use Decode para evitar várias viagens ao banco de dados
(c) Tente evitar junção externa
(d ) Às vezes, decompor a lógica em pequenas partes torna o trabalho mais rápido

(10) Se estiver tentando usar a visão complexa, verifique se as tabelas base podem ser usadas, pois a visão tende a prejudicar o desempenho

(11) Use UNION ALL Vs UNION se você souber que os dados recuperados não terão linhas duplicadas

( 12) Use dicas para otimizar o plano de execução. Às vezes, a dica pode ser usada para alterar o plano de execução da consulta para obter o caminho mais ideal.
Algumas vezes, a espiada de ligação cria um plano ruim, então, nesse caso, colocar a dica necessária para corrigir o plano ajuda a obter o bom desempenho sempre
As dicas mais comuns são
/*+ LEADING (alias da tabela) */ especifica a tabela pela qual iniciar a junção
/*+ FIRST_ROWS */ muito bom para on-line screens – favorece NESTED LOOPS
/*+ INDEX ( table alias.index name) */ especifica o índice que você deseja usar. Nota:se o índice for descartado e recriado e o nome for alterado, a dica não será mais válida.
/*+ USE_NL (table alias1 table alias 2)*/ pede ao otimizador para usar o Nested Loop Join para as duas tabelas especificadas

Evite dicas de otimizador desnecessárias e use-as com cuidado

Essas são algumas das dicas para evitar problemas e fazer o ajuste do sql. Sql tuning é um grande oceano e você pode aprender coisas praticando apenas. Boa sorte!!

Também lê
https://docs.oracle.com/cd/B19306_01/server.102/b14211/sql_1016.htm