05:29
1

Tuning

Princípios de Desempenho


A optimização do desempenho requer um diferente método para a configuração inicial do sistema . Configuração de um sistema envolve a alocação de recursos de forma a agir de forma ordenada e aperfeiçoada.
Tuning é impulsionado por identificar o gargalo mais significativo e fazer as mudanças necessárias para reduzir ou eliminar o efeito desse gargalo. Normalmente , o ajuste é feito de forma reativa , ou enquanto o sistema está pré-produção ou em produção.

Base de comparação.

A maneira mais eficaz para sintonizar é ter uma linha de base de desempenho estabelecido que pode ser usado para comparação, se um problema de desempenho surge. Conhecer o seu sistema bem pode facilmente a identificar os períodos de pico de uso . Por exemplo, os períodos de pico pode ser 10:00-12:00 e também 13:30-15:00 . Isto pode incluir uma janela lote de 00:00 à meia-noite para 06:00 .
É importante identificar esses períodos de pico no local e instalar uma ferramenta de monitoramento que reúne dados de desempenho para aqueles momentos de alta carga. Idealmente, a coleta de dados deve ser configurado a partir de quando o aplicativo está em sua fase inicial de teste durante o ciclo de QA .

Para analise inicial sugiro a coleta das seguintes informações:

  • Estatísticas Aplicativos (volumes de transação, tempo de resposta)
  • Estatísticas de banco de dados
  • Estatísticas do sistema operacional
  • Disco estatísticas de E / S
  • Estatísticas de rede

SQL Tuning

O primeiro item da lista acima é Estatísticas Aplicativos , de acordo com a oracle sql rum é a maior causa de problema no banco de dados. 

Entenda o Otimizador

O otimizador determina a maneira mais eficiente de se rodar um SQL.

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.

Otimizador Baseado em Custo (cost Based Optimizer - CBO): 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. 

Conheça suas consultas

Conheça e Explain Plan : O Explain Plan irá te ajudar a descobrir, através do plano de execução da consulta, os meios de acesso que o Oracle está utilizando para acessar as tabelas do banco de dados.

Use FrameWork: Hoje em dias os frameWorks de desenvolvimento como Hibernate já implementam melhores praticas e otimizações para consultas em banco de dados.

Dicas SQL

  • TDE : Degrada a performance de instruções SQL
  • CONSTRAINTS: Aumenta o tempo de gravação
  • LOCKS:Ocasiona espera e aumenta o tempo de gravação
  • SQL Performance Tuning recomenda usar COUNT (1) em vez COUNT (*) para otimização de desempenho.
  • Use UNION ALL em vez UNION se possível.
  • Muito pouco utilizada mas a recomendação é a utilização de instruções CASE  É mais eficiente para executar única instrução, se possível de duas declarações separadas para o mesmo resultado.

Exemplo:

Não use:

SELECT COUNT (1)   FROM emp  WHERE salary < 1000;

SELECT COUNT (1)   FROM emp  WHERE salary BETWEEN 1000 AND 2000;

Use:

SELECT COUNT (CASE WHEN salary < 1000

                   THEN 1 ELSE null END) count_1,

       COUNT (CASE WHEN salary BETWEEN 1001 AND 2000

                   THEN 1 ELSE null END) count_2   FROM emp;

Hints

Conheça os Hints , mesmo sabendo que com SQL bem escrito o oracle irá tomar a melhor decisão com relação a tempo e custo , podemos querer algo diferente o os hints pode nos ajudar, seque um resumo dos principais hint:

HINT USO
  • INDEX_JOIN Permite a mistura de índices de uma única tabela
  • INDEX_ASC Usa um índice classificando em ordem crescente
  • INDEX_DESC Usa um índice classificando em ordem decrescente
  • AND_EQUAL Acessa vários índices b-tree
  • INDEX_COMBINE        Acessa vários índices bitmap
  • INDEX_FFS Força varreduras completas rapidas
  • ORDERED Especifica a ordem principal das tabelas
  • LEADING Especifica apenas a primeira tabela principal
  • ORDERED_PREDICATES Força a ordem do predicado
  • APPEND Anexa dados em novos blocos
  • NOAPPEND Verifica o espaço livre dos blocos atuais antes de usar novos blocos
  • CACHE         Faz com que uma varredura de tabela completa seja fixada na memória
  • NOCACHE Faz com que uma tabela especificada seja colocada em cachê no nível de banco de dados para não ser colocada em cachê quando você o acessa
  • CLUSTER Força o agrupamento de clusters
  • CHOOSE Força a otimização baseada em custo
  • RULE Força a otimização baseada em regra
  • FIRST_ROWS Geralmente, força o uso de índices
  • ALL_ROWS Geralmente, força uma varredura de tabela completa
  • FULL Força uma varredura de tabela completa
  • INDEX         Força o uso de um índice
  • NO_INDEX Evita que um índice especificado seja usado
  • NO_EXPAND Ajuda a eliminar a expansão do OR
  • ROWID         Vai para o local físico exato para pegar a informação
  • STAR Força um plano de consultas em estrela
  • DRIVING_SITE Processa dados apanhando-os de um bloco de dados em particular
  • USE_MERGE Alterar o modo como as tabelas são unidas internamente
  • PUSH_SUBQ         Força a subconsulta a ser processada antecipadamente
  • PARALLEL Faz com que as consultas de varredura de tabela completa dividam a consulta em partes e processem cada parte com um processo diferente
  • NO_PARALLEL Desativa o uso de operações paralelas em qualquer consulta para uma tabela especificada para usar operações paralelas
  • HASH Força o hashing do cluster
  • CURSOR_SHARING_EXACT Cancela a definição de CURSOR_SHARING







1 comentários:

Unknown disse...

Olá, gostaria de saber a diferença entre um Select em tabela ou em uma view que contenha todos os campos da Tabela. A equipe de AD do cliente colocar um padrão de aplicação acessar sempre view, isto parece estranho visto que aplicação é dona da informação. A própria Oracle com EBS faz select direto em tabela.

Postar um comentário