Tuning de SQL Melhore a performance de suas aplicações Oracle
Eduardo GonçalvesPrefácio
Talvez você deva estar se perguntando: por que preciso entender sobre Tuning? Ou talvez: como nunca li ou vi nada sobre isso até hoje, depois de todo esse tempo trabalhando com banco de dados? Será que é realmente interessante que eu conheça esse assunto? Pois bem, durante minha trajetória na área de TI, mais precisamente, trabalhando com análise e desenvolvimento de sistemas, sempre fui muito curioso. Na verdade, eu tenho um desejo forte de entender como as coisas funcionam. Sempre tive essa curiosidade. Falar para mim que isso funciona assim, porque sim, nunca foi do meu agrado, principalmente quando se tratava de questões relacionadas ao meu trabalho. Entendo que, para ser o melhor naquilo que se faz, você tem que entender como as coisas funcionam, como foram idealizadas. Não fazer por fazer e torcer para dar certo. Isso me ajudou muito durante esta trajetória, pois através desse ímpeto de querer saber das coisas fui agregando mais conhecimento e, o melhor de tudo, adquirindo facilidade de entendimento.
A receita na verdade é simples, quanto mais treino, mais resultado. É como exercitar os músculos. Com o cérebro é a mesma coisa. Lembro de como era um aluno mediano em quase todas as matérias no colégio. Meus pesadelos eram Português e Matemática, não gostava de redação nem de fazer cálculos. Quanto ao português, pois bem, hoje, depois de tanto treino, escrevo livros, então acho que alguma coisa mudou e valeu muito a pena o esforço, e a matemática… Bem, ficou mais minha amiga, não tão íntima, mas nos damos bem.
À medida que fui conhecendo mais sobre programação e banco de dados, fui entrando neste mundo do _Tuning_. Comecei sem saber muita coisa, mas fui lendo materiais e manuais sobre o assunto. Na época, não tinha muito conteúdo, apenas materiais em inglês muito pouco práticos e mais sobre conceitos, sem muitos exemplos e casos do dia a dia. Aprendi muito (quero dizer, apanhei muito) com os problemas que foram surgindo durante minha trajetória na área e fui gostando deste tema.
Durante o tempo em que trabalhei com Tuning, resolvi desde problemas fáceis até problemas mais complicados ou trabalhosos de se resolver. Muitas vezes tive que recorrer a manuais e também a conhecidos da área, colegas de trabalho e da faculdade, para entender mais sobre o assunto ou como os bancos de dados trabalhavam em um nível mais distante da área de desenvolvimento. Mas valeu a pena. Conheci pessoas incríveis, com muito conhecimento sobre o assunto. Com o tempo fui adquirindo mais entendimento e tinha a sensação de ser mais fácil resolver os problemas.
Peguei alguns desafios pela frente e sempre tinha a pressão de ter que resolver em um prazo curto. Um faturamento parado, uma logística atrasada ou uma obrigação fiscal com entrega em cima do laço, foram alguns dos desafios que envolveram problemas de performance com os quais pude atuar. Lembro até da primeira vez em que viajei de avião, fazendo um bate e volta a São Paulo, para resolver um problema de performance referente a um relatório contábil que levava muitas horas para rodar, mas que tinha que funcionar em bem menos tempo, pois, caso contrário, a empresa não poderia fazer as conciliações no prazo em que precisava. E lá fui eu. Enfim, foram várias as experiências que tive. Foi sensacional e valeu muito a pena! Nossa vida é curta e passageira, então o que você puder adquirir de conhecimento certamente vai torná-la mais interessante, isso vale para a vida pessoal, trabalho, família e todo o resto.
Procurei reunir neste livro um pouco de conhecimento sobre monitoramento e ajuste da performance para a linguagem Oracle SQL. O livro aborda conceitos importantes sobre o assunto através de explicações e exemplos. São demonstradas as ferramentas para o trabalho de monitoramento, e como extrair e gerar informações importantes para que o banco de dados possa retornar resultados dentro de uma performance mais adequada. Espero que você aceite este desafio. No mínimo, você conhecerá algo novo ou relembrará o assunto, caso já tenha tido contato. Desejo a você uma ótima leitura!
Sobre o livro
A cultura da performance
Conforme será explanado durante todo o livro, nosso objetivo maior será demonstrar as técnicas e ferramentas para se analisar instruções SQL, tendo em vista que, quando estamos falando de performance referente a programas, este se torna o ponto principal de análise. A forma como as informações estão sendo acessadas ou processadas em um banco de dados é a maior causa de demoras na execução de programas e muitas vezes são necessários ajustes para corrigir esses problemas.
Além do ajuste de instruções SQL, dependendo do caso, podemos propor outros recursos da linguagem ou formas diferentes de lidar com cada situação, sem prejudicar o resultado final. Você vai perceber que às vezes esse trabalho vai envolver a reescrita de um programa e outro, no caso de um ajuste de SQL ainda não surtir o efeito desejado. Por outro lado, vamos explorar os recursos e ferramentas do próprio banco de dados para gerar, extrair e analisar dados estatísticos com o intuito de entender cenários e propor soluções para os mais diversos problemas relacionados à performance.
Antes de mais nada, vamos falar um pouco sobre essa busca pela performance, quando e como fazê-la, e entender as premissas de como executar esse trabalho, tanto de maneira preventiva, como de maneira corretiva. Você verá que muitas vezes poderá resolver questões desse tipo alinhando ou definindo processos, sem a necessidade de codificar. Mas às vezes será preciso colocar a mão na massa – e de forma corretiva. A ideia é mudar esse panorama e criar a cultura de pensar em desempenho desde o início, desde a análise de uma aplicação, até sua concepção e implantação.
O que veremos?
Serão demonstradas diversas técnicas para se escrever instruções SQL de uma forma mais adequada, para que o otimizador do banco de dados possa escolher um plano de execução eficaz para executá-las. Veremos algumas dessas técnicas, como a criação de índices, o uso das sugestões (Hints), o ajuste da sintaxe, uso dos métodos de acesso às tabelas, cursores e ponteiros.
Falaremos também sobre as ferramentas de auxílio ao trabalho de Tuning de SQL, mais precisamente as que analisam instruções SQL ou que geram estatísticas para o otimizador do banco de dados. O uso delas trará as informações que auxiliarão você na análise de aplicações problemáticas, na geração de estatísticas para o otimizador, na visualização dos planos de execução e na obtenção de informações sobre o processamento das instruções executadas no banco de dados, ferramentas estas que acompanham o próprio banco de dados Oracle.
Não utilizaremos ferramentas gráficas ou de outros fornecedores que não sejam do próprio banco de dados. A ideia é trabalhar com o que geralmente nós, desenvolvedores, já temos em mãos no ambiente do banco de dados. Na grande maioria das vezes, a pessoa desenvolvedora não tem acesso a ferramentas administrativas ou a ferramentas mais sofisticadas, como gráficos, botões e relatórios estatísticos mais elaborados. A ideia aqui é demonstrar que, com as ferramentas padrões já existentes no próprio banco de dados, já podemos fazer muito, sem inviabilizar este trabalho tendo que adquirir licenças de outros programas, mais instalações ou configurações mais avançadas, bem como despender tempo para aprendê-las.
A busca por um melhor desempenho não envolve apenas questões técnicas, mas também o entendimento de como uma aplicação é utilizada. Entender como um usuário utiliza tal aplicação ou como ela foi projetada pode dar a você indícios do caminho por onde começar. Não necessariamente, como já foi dito, você precisará rescrever um programa ou criar um índice para melhorar um determinado cenário. Às vezes, o problema pode vir de um procedimento mal executado por aqueles que operam parte de um sistema ou até mesmo da falta de conhecimento do sistema como um todo. Você deve ter em mente que não existe exatamente uma receita de bolo de como melhorar a performance de um programa. Temos que garimpar para encontrar o problema e aplicar possíveis soluções até chegar a um resultado aceitável.
Para quem se destina este livro?
Este livro é voltado para o desenvolvedor e a desenvolvedora de aplicações, analista de sistemas ou para pessoas de outras áreas que querem conhecer essas técnicas. Você verá que a busca pela performance não dependerá, muitas vezes, única e exclusivamente, de um indivíduo, ou seja, somente de você, mas sim do apoio de profissionais de outras áreas e até dos usuários do sistema. As dicas, ferramentas e técnicas apresentadas aqui são direcionadas a quem desenvolve sistemas. A ideia é que todos os recursos apresentados aqui possam ser aplicados por você, dev, no seu dia a dia, exceto para determinados acessos em que você precisará do apoio de um DBA (_Database Administrator_/ Administrador de banco de dados).
Do que trata este livro?
A ideia central deste livro é mostrar as técnicas e ferramentas de Tuning de SQL para instruções SQL no ambiente Oracle, tanto as que são executadas de forma isolada, quanto aquelas que são executadas de dentro de programas PL/SQL, visando fornecer subsídios para você buscar a performance mais adequada para suas aplicações, e encontrar soluções para os problemas de desempenho. Teremos como ênfase dicas de como melhor escrever essas instruções SQL e de como solucionar problemas utilizando os recursos desta linguagem e do próprio banco de dados. As técnicas e ferramentas aqui demonstradas são específicas para o banco de dados Oracle da empresa Oracle Corporation.
Não trataremos aqui de questões relacionadas ao monitoramento e ajuste da performance referente às áreas de infraestrutura de hardware e redes, sistemas operacionais, parametrizações e configurações específicas do banco de dados. Vamos focar, em primeiro lugar, em ajudar você a pensar em desempenho quando escrever suas aplicações ou necessitar melhorar ou corrigir programas já existentes. Quando me ouvir falar em melhorar seus programas ou aplicações, estarei me referindo, na grande maioria das vezes, a uma instrução SQL, a um conjunto de instruções SQL, ou ainda, a instruções SQL que fazem parte de um ou mais programas PL/SQL, por exemplo.
Depois disso, vamos ver como extrair as informações necessárias das próprias execuções, bem como das diversas estatísticas armazenadas no banco de dados, para as diversas análises de monitoramento e ajuste da performance. Tudo isso, basicamente, para deixar seus programas mais rápidos.
Pré-requisitos
Se você desejar acompanhar ou tentar simular os exemplos demonstrados no livro, você pode baixar uma versão gratuita do banco de dados Oracle no site da própria empresa Oracle (https://www.oracle.com/downloads/). Você poderá instalar na sua própria máquina. Trata-se de uma versão mais básica do banco de dados e de simples instalação.
Vale lembrar que, quando falamos sobre questões de performance, parâmetros como ambiente, memória, condições da instalação do banco de dados etc. podem influenciar nos dados apresentados. Desta forma, o exemplo demonstrado neste livro pode não refletir o mesmo resultado estatístico, por exemplo, em outro ambiente. Contudo, não tem problema, pois o mais importante é entender as técnicas e como as ferramentas podem ser utilizadas.
Outro requisito consiste em conhecer a linguagem SQL (e, opcionalmente, um pouco da linguagem PL/SQL), pois as técnicas e ferramentas apresentadas aqui serão para o monitoramento e ajustes das instruções escritas nessa linguagem.
Downloads
Os scripts para montar a base de dados (tabelas e dados) para a execução dos exemplos do livro, e também alguns scripts, estão disponíveis no endereço: https://github.com/eduardogoncalvesbr/livrotuning-casadocodigo.
Sumário
- 1 Antes da técnica
- 1.1 Tuning de SQL
- 1.2 Monitoramento da performance
- 1.3 Opte pela prevenção, não pela manutenção
- 1.4 Modelagem é a base de tudo
- 1.5 Desenvolvedores versus DBA: Trabalho em conjunto
- 1.6 Por onde começar?
- 2 Ajuste da SQL
- 2.1 Otimizador de consultas
- 2.2 O otimizador do Oracle
- 2.3 O Modo baseado em Custos (CBO)
- 2.4 O Modo baseado em Regras (RBO)
- 2.5 SQL x PL/SQL: Como melhorar um cenário?
- 3 Processando instruções SQL
- 3.1 Passos para a execução de instruções SQL
- 3.2 Shared SQL Areas
- 4 Utilização de índices
- 4.1 Tipos de índices
- 5 Métodos de junção de tabelas
- 5.1 Executando operações de junção no modo CBO
- 5.2 Escolhendo métodos de junção no modo CBO
- 5.3 Escolhendo planos de execução para tipos de junção no modo CBO
- 5.4 NESTED LOOPS join
- 5.5 SORT MERGE join
- 5.6 HASH join
- 5.7 CARTESIAN join
- 5.8 Comparação entre os métodos NESTED LOOPS, SORT MERGE e HASH
- 5.9 Tipos de junção
- 6 Métodos de acesso
- 6.1 Como o armazenamento e a leitura dos registros acontecem?
- 6.2 FULL TABLE SCANS
- 6.3 ROWID SCANS
- 6.4 INDEX SCANS
- 6.5 BITMAP SCANS
- 6.6 CLUSTER SCANS
- 6.7 HASH SCANS
- 6.8 SAMPLE TABLE SCANS
- 6.9 Escolhendo os métodos de acesso no modo RBO
- 6.10 Escolhendo os métodos de acesso no modo CBO
- 7 Tabela Controle (Driving Tables)
- 7.1 Ordenando tabelas e filtros
- 7.2 Forçando a Driving Table por hint
- 7.3 Driving Tables e os métodos de junção
- 7.4 Driving Tables e os Planos Cartesianos (CARTESIAN join)
- 8 Otimizando através de hints
- 8.1 hint CHOOSE
- 8.2 hint RULE
- 8.3 hint ALL_ROWS
- 8.4 hint INDEX
- 8.5 hint ORDERED
- 8.6 hint PARALLEL
- 8.7 hint FIRST_ROWS
- 8.8 hint FULL
- 8.9 hint LEADING
- 8.10 hint CACHE
- 8.11 hint USE_NL
- 8.12 hint USE_HASH
- 8.13 hint USE_MERGE
- 8.14 Considerações sobre o uso de hints
- 9 Planos de Execução (Explain Plan)
- 9.1 Interpretando Planos de Execução
- 10 Gerando estatísticas para o otimizador
- 10.1 O pacote dbms_stats
- 10.2 Quando eu devo gerar estatísticas?
- 10.3 Geração automática de estatísticas
- 11 Histogramas
- 11.1 Gerando histogramas
- 11.2 Quando e como utilizar ou não histogramas?
- 12 Gerando e visualizando planos de execução
- 12.1 SQL*Plus
- 12.2 explain plan
- 12.3 v$sql_plan
- 12.4 autotrace
- 12.5 dbms_xplan
- 12.6 Rastreie e visualize com trace e tkprof
- 13 Conclusão
- 14 Referências bibliográficas
Dados do produto
- Número de páginas:
- 523
- ISBN:
- 978-65-86110-94-4
- Data publicação:
- 12/2021