Após um tempo finalmente, consegui dar continuidade ao blog 🙂 :). E aqui vai uma pré para o post mais aprofundado para do CBO que virá.
Quando um comando SQL chega ao engine oracle, quatro elementos são importantes para a execução do mesmo:
• Parser
• Optimizer
• Row source generator
• SQL executor
Parser:
Este elemento confere se a sintaxe e a semântica do SQL enviado estão corretas. Durante a análise sintáxica, o parser irá garantir que os comandos foram executados corretamente (o que poderíamos chamar de analise gramatical), enquanto, o que podemos chamar de análise semântica, confere se os objetos referenciados realmente existem na BD.
Otimizador:
Este componente tem um papel principal. É responsável por descobrir o melhor caminho (que se define como plano de execução) para retornar os dados, consoante aos filtros e relações que possam existir.
Para tal existem dois tipos de otimizador o CBO (Cost Based Optimizer) e o RBO (Rule Based Optimizer), sendo o CBO o otimizador mais robusto o RBO já foi descontinuado, apesar de coexistir não houve mais evoluções para o mesmo.
O CBO define a melhor forma de obter os dados, baseia-se nos seguintes quesitos:
• No código SQL enviado
• Na capacidade da máquina (estatísticas de sistema)
• No modelo de dados (pk, references e etc)
• Dispersão dos dados (estatísticas das tabelas e índices)
• E parâmetros de BD (já falado em outros posts optimizer_index_cost_adj, optimizer_index_caching, db_file_multiblock_read_count e etc).
Com estes itens o CBO faz um bom julgamento perante os vários planos de execuções possíveis para escolher o melhor.
Gerador de registro:
Com o plano de execução em mãos , que é o conjunto estruturados das fontes dos dados, em que cada um retorna a porção de dados necessários para o SQL trabalhar.
Executor de SQL:
Componente que executa o plano de execução e produz o resultado final.
Saudações Vascaínas….