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:
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