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!