GPO ( Grupo de Profissionais Oracle )
A maior comunidade Oracle do Brasil !

Simulando Parsing na Library Cache do Oracle

A Library Cache, unidade localizada na Shared Pool do Oracle, possui a funcionalidade de efetuar o Parsing (ou análise) de Sqls.

Abaixo, estarei simulando a execução de um Sql que o usuário Scott irá executar no banco de dados e apresentando sua análise/parsing na Library Cache, conforme documentação da Oracle.

Usuário Scott executa o SQL.

select nome from funcionarios;

Após a execução desta consulta, o Oracle irá fazer uma análise da sintaxe da query.  “Bom Scott, pelo visto você está utilizando um select .. blz! Acabei de encontrar o from, seguido de um negócio chamado funcionarios, que eu ainda desconheço … mas ok. Scott, muito bem na sintaxe meu rapaz, vamos continuar  a análise!”

Com isso, após a primeira verificação, o Oracle irá fazer a verificação dos objetos utilizados no comando. “Scott, meu caro usuário, como eu sei que “select”, “from”  e “;” fazem parte da sintaxe … bom,  não  vou interpretá-los como objeto. Com isso camarada, temos um negócio que você chamou de “nome”, mas eu nem sei o que é isso, não encontrei nenhuma referência meu velho, mas vamos seguir em frente para ver se eu posso te ajudar. Opa! “Funcionarios”, achei uma tabela! Então, pensando bem aquele negócio que você chamou de “nome”, será que faz parte desta tabela? Vou verificar … verificando … achei! Mas rapaz, são muitos campos desta coluna “nome”. Tú poderia ter sido mais gente boa , hein? Poderia ter utilizado um  where.  Mas beleza Scott. Embora você esteja impactando a minha performance, não há tempo para reclamações, bora  parar de enrolar aqui e vamos ir andando, tenho vários outras requisições para analisar ainda, está achando que é só você? Tenho que apresentar uma boa perfomance rapaz!”

Muito bem Scott, até este momento você foi  bem. Mas será que você pode verificar os dados desta tabela? Você possui os grants/privilégios necessários para acessar está tabela? Ahh se você não tiver Scott! Muita calma nesta hora, vou verificar seus grants camarada! Muito bem Scott, achei que iria te barrar nesta, mas está tudo bem, já que você possui os grants necessários para acessar o objeto “funcionarios”. Agora deixa comigo!

Cansei desta sua linguagem  Scott, vou transformar isto aqui para minha linguagem  Bytecode e depois escolher o melhor caminho para se executar está sua solicitação. Feito!

NOME
Scott
Bruno
Maria
João
Pedro
Gustavo
José
Letícia

A grande pergunta é: Por que o Oracle faz isso? Bom, se alguém executar  o mesmo select novamente, o Oracle não precisará executar está análise novamente e, consequemente, o custo será menor.

Bom, espero ter sido útil. Para quem se interessar, segue duas docs da Oracle  que achei interessante sobre o tema abaixo:

Abraços!

Share

You may also like...

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *