o SQL executado diretamente pelo plus é dinâmico, e SQL dinâmico
implica em PARSE, no way. Como eu disse na msg, se o SQL for
executado dentro de um programa em outra linguagem (vc cita java),
sim, tem como não fazer PARSE em excesso,no caso de java vc tem que
usar bind variables , tem que usar PreparedStatements para que seja
possível re-uso de SQLs, não esquecer de FECHAR o statement após o
uso... Procure em http://asktom.oracle.com que vc acha refs sobre.
[]s
Chiappa
--- Em [email protected], Nelson Cartaxo
<[EMAIL PROTECTED]> escreveu
>
> Chiappa, perfeito seu exemplo, mas ainda continuo com uma dúvida.
Existe
> alguma maneira de fazer menos parses via sqlplus usando sql? Ou só
mesmo
> dentro de um pl/sql? Pergunto isso pq certamente tem varios
sistemas aqui
> dentro(usando sqlplus, java, etc) que não usam pl/sql.
>
> Obrigado.
>
> Nelson Cartaxo
> DBA ORACLE
>
>
>
> -----Mensagem original-----
> De: jlchiappa [mailto:[EMAIL PROTECTED]
> Enviada em: Tuesday, May 30, 2006 1:11 PM
> Para: [email protected]
> Assunto: [oracle_br] Re: Parse
>
>
> Exato, André : Nelson, é fácil se ver que a primeira execução
> necessariamente implica em hard parse, E que é o sqlplus que está
> fazendo reparse (soft, mas é reparse) a cada execução, cfrme :
>
> ==> numa sessão conexão dedicada, que já está com trace ativo, vou
> executar um SQL que sei que não existia ainda no cache:
>
> [EMAIL PROTECTED]:SQL>select deptno, dname, 'fixo' from dept;
>
> DEPTNO DNAME 'FIX
> ------------------ -------------- ----
> 10 ACCOUNTING fixo
> 20 RESEARCH fixo
> 30 SALES fixo
> 40 OPERATIONS fixo
> 77 Depto 77 fixo
> 78 Ação fixo
> 50 Pólen fixo
> 43 Depto 43 fixo
>
> 8 linhas selecionadas.
>
> ==> necessariamente isso gerou um hard parse, agora vou executar
> EXATAMENTE o mesmo SQL na mesma sessão, veremos que o sqlplus VAI
> fazer parse 9soft, mas é parse) a cada vez :
>
> [EMAIL PROTECTED]:SQL>/
>
> DEPTNO DNAME 'FIX
> ------------------ -------------- ----
> 10 ACCOUNTING fixo
> 20 RESEARCH fixo
> 30 SALES fixo
> 40 OPERATIONS fixo
> 77 Depto 77 fixo
> 78 Ação fixo
> 50 Pólen fixo
> 43 Depto 43 fixo
>
> 8 linhas selecionadas.
>
> [EMAIL PROTECTED]:SQL>/
>
> DEPTNO DNAME 'FIX
> ------------------ -------------- ----
> 10 ACCOUNTING fixo
> 20 RESEARCH fixo
> 30 SALES fixo
> 40 OPERATIONS fixo
> 77 Depto 77 fixo
> 78 Ação fixo
> 50 Pólen fixo
> 43 Depto 43 fixo
>
> 8 linhas selecionadas.
>
> [EMAIL PROTECTED]:SQL>/
>
> DEPTNO DNAME 'FIX
> ------------------ -------------- ----
> 10 ACCOUNTING fixo
> 20 RESEARCH fixo
> 30 SALES fixo
> 40 OPERATIONS fixo
> 77 Depto 77 fixo
> 78 Ação fixo
> 50 Pólen fixo
> 43 Depto 43 fixo
>
> 8 linhas selecionadas.
>
> [EMAIL PROTECTED]:SQL>/
>
> DEPTNO DNAME 'FIX
> ------------------ -------------- ----
> 10 ACCOUNTING fixo
> 20 RESEARCH fixo
> 30 SALES fixo
> 40 OPERATIONS fixo
> 77 Depto 77 fixo
> 78 Ação fixo
> 50 Pólen fixo
> 43 Depto 43 fixo
>
> 8 linhas selecionadas.
>
> [EMAIL PROTECTED]:SQL>disc;
> Desconectado de Oracle9i Enterprise Edition Release 9.2.0.5.0 -
64bit
> Production
> With the Partitioning option
> JServer Release 9.2.0.5.0 - Production
>
> ==> como ficou no tkprof :
>
>
**********************************************************************
> **********
>
> select deptno, dname, 'fixo'
> from
> dept
>
>
> call count cpu elapsed disk query
> current rows
> ------- ------ -------- ---------- ---------- ---------- ----------
> ----------
> Parse 5 0.01 0.01 0 0
> 0 0
> Execute 5 0.00 0.00 0 0
> 0 0
> Fetch 10 0.01 0.00 0 25
> 0 40
> ------- ------ -------- ---------- ---------- ---------- ----------
> ----------
> total 20 0.02 0.01 0 25
> 0 40
>
> Misses in library cache during parse: 1
> Optimizer goal: CHOOSE
> Parsing user id: 69
>
> Rows Row Source Operation
> ------- ---------------------------------------------------
> 8 TABLE ACCESS FULL DEPT
>
> ==> 1 miss = 1 hard parse, portanto desses 5 parses 4 foram soft.
No
> caso tive 5 execuções (o que é bom, indica que a aplicação está
> enviando SQLs semelhantes), mas 5 parses pra essas 5 execuções,
isso
> é HORROROSO, num sistema produção a regra é ZERO (ou no máximo 1)
> parse pra N execuções, cfrme :
>
> ==> em outra sessão crio um PL/SQL :
>
> [EMAIL PROTECTED]:SQL>create or replace procedure P_NO_PARSE is
> 2 BEGIN
> 3 for r in (select DEPTNO, dname, 'abobora' from dept) loop
> 4 dbms_output.put_line(r.deptno || ',' || r.dname);
> 5 end loop;
> 6 END;
> 7 /
>
> Procedimento criado.
>
> ==> e executo o SQL via stored PL/SQL 5 vezes :
>
> [EMAIL PROTECTED]:SQL>exec P_NO_PARSE;
>
> Procedimento PL/SQL concluído com sucesso.
>
> [EMAIL PROTECTED]:SQL>exec P_NO_PARSE;
>
> Procedimento PL/SQL concluído com sucesso.
>
> [EMAIL PROTECTED]:SQL>exec P_NO_PARSE;
>
> Procedimento PL/SQL concluído com sucesso.
>
> [EMAIL PROTECTED]:SQL>exec P_NO_PARSE;
>
> Procedimento PL/SQL concluído com sucesso.
>
> [EMAIL PROTECTED]:SQL>exec P_NO_PARSE;
>
> Procedimento PL/SQL concluído com sucesso.
>
> [EMAIL PROTECTED]:SQL>disc;
> Desconectado de Oracle9i Enterprise Edition Release 9.2.0.5.0 -
64bit
> Production
> With the Partitioning option
> JServer Release 9.2.0.5.0 - Production
>
> ==> resultado do tkprof :
>
>
**********************************************************************
> **********
>
> SELECT DEPTNO, DNAME, 'abobora'
> FROM
> DEPT
>
>
> call count cpu elapsed disk query
> current rows
> ------- ------ -------- ---------- ---------- ---------- ----------
> ----------
> Parse 1 0.01 0.00 0 0
> 0 0
> Execute 5 0.00 0.00 0 0
> 0 0
> Fetch 45 0.01 0.00 0 55
> 0 40
> ------- ------ -------- ---------- ---------- ---------- ----------
> ----------
> total 51 0.02 0.00 0 55
> 0 40
>
> Misses in library cache during parse: 1
> Optimizer goal: CHOOSE
> Parsing user id: 69 (recursive depth: 1)
>
> Rows Row Source Operation
> ------- ---------------------------------------------------
> 40 TABLE ACCESS FULL DEPT
>
> ==> agora estamos na boa em relação a parse, N execuções e apenas
um
> parse... E note também que, ALÉM de evitar parse, AUTOMAGICAMENTE o
> PL/SQL já transformou o texto do meu SQL em maiúsculas (e se
houvesse
> teria removido eventuais brancos e itens desnecessários), é OUTRA
> vantagem que vc obtém com PL/SQL. Foi este exemplo que usei na
minha
> apresentação na ENPO de 2005, é por isso que se recomenda SEMPRE
> trabalhar com PL/SQL se possível - não é que seja impossível (LONGE
> DISSO) de se obter os mesmos benefícios em SQLs armazenados em
> programas java, vb, delphi, o que for, mas nessas lings todas
> normalmente vc TEM QUE tomar uma ação extra, TEM QUE escrever algo
a
> mais, adicionar algum componente a mais, enfim, fazer algo, o que é
> AUTOMÁGICO no PL/SQL com SQLs estáticos.
>
> []s
>
> Chiappa
>
> --- Em [email protected], "Andre Santos"
> <[EMAIL PROTECTED]> escreveu
> >
> > Nelson
> >
> > Além disso que o Chiappa esclareceu, também há diferença
> entre "hard parse"
> > e "soft parse"... Como a instrução é exatamente a mesma, deverá
ser
> feito um
> > "soft parse" (que tem um custo menor), não é?
> >
> > [ ]
> >
> > André
> >
> >
> >
> > Em 30/05/06, Nelson Cartaxo <[EMAIL PROTECTED]> escreveu:
> > >
> > > Mais uma vez obrigado chiappa. Vou fazer este teste.
> > >
> > > Abraços,
> > >
> > > Nelson Cartaxo
> > > DBA ORACLE
> > >
> > >
> > >
> > > -----Mensagem original-----
> > > De: jlchiappa [mailto:[EMAIL PROTECTED]
> > > Enviada em: Monday, May 29, 2006 9:41 PM
> > > Para: [email protected]
> > > Assunto: [oracle_br] Re: Parse
> > >
> > >
> > >
> > > É bem simples o motivo : o sqlplus é uma tool que por definição
> TEM
> > > que receber SQLs ad-hoc, que não se sabe a priori quais
> serão,então
> > > ela TEm que usar SQL dinâmico, e SQL dinâmico implica em parse
> > > sempre... Repita o teste num stored PL/SQL, repetindo
exatamente o
> > > mesmo SQL 50 vezes (pode ser num LOOP) que vc vai ver que aí sim
> > > (claro) o SQL é estático, é CONHECIDO a priori e portanto há
> > > re-aproveitamento automático e natural de SQL.
> > >
> > > []s
> > >
> > > Chiappa
> > >
> > > --- Em [email protected], Nelson Cartaxo
> > > <[EMAIL PROTECTED]> escreveu
> > > >
> > > > Pessoal boa tarde,
> > > >
> > > > Poderiam me tirar uma duvida? Oracle versão 8.1.7.4
> > > >
> > > > Tenho um select simples
> > > >
> > > > select dt_inicio, dt_fim from tb_vigencia
> > > > where co_vigencia=10
> > > >
> > > > Gostaria de tentar entender, do pq de quando eu executo por
> exemplo
> > > 50 vezes
> > > > esta mesma query, com o uso do "/" dentro do sqlplus, no
trace
> ele
> > > faz 50
> > > > parses. Não deveria fazer apenas 1 parse, tendo em vista que
> não
> > > mudei nada
> > > > na query?
> > > >
> > > > Segue o resultado do trace
> > > >
> > > > call count cpu elapsed disk query
> current
> > > > rows
> > > > ------- ------ -------- ---------- ---------- ---------- ----
--
> ----
> > > > ----------
> > > > Parse 32 0.02 0.03 0
> 0 0
> > > > 0
> > > > Execute 32 0.00 0.00 0
> 0 0
> > > > 0
> > > > Fetch 64 0.00 0.00 0
> 64 0
> > > > 32
> > > > ------- ------ -------- ---------- ---------- ---------- ----
--
> ----
> > > > ----------
> > > > total 128 0.02 0.03 0
> 64 0
> > > > 32
> > > >
> > > > Fizemos uns testes inclusive com variavel bind e mesmo assim
o
> numero de
> > > > parses é o mesmo.
> > > >
> > > > Valeu pela força.
> > > >
> > > > Nelson Cartaxo
> > > > DBA ORACLE
> > > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > ----------------------------------------------------------------
--
> ----------
> > > ----------------------------------------------
> > > Atenção! As mensagens deste grupo são de acesso público e de
> inteira
> > > responsabilidade de seus remetentes.
> > > Acesse: http://www.mail-
archive.com/[email protected]/
> > >
> > > ----------------------------------------------------------------
--
> ----------
> > >
> > > ----------------------------------------------
> ______________________________
> > > ____________________________________
> > >
> > > Este Grupo recebe o apoio da SQL Magazine -
> > > www.devmedia.com.br/sqlmagazine
> > >
__________________________________________________________________
> > > O grupo Oracle_br não aceita anexos. Quando oferecer algum
> arquivo, tenha
> > > o
> > > link do mesmo para evitar trafego(pedidos) desnecessário.
> > > Links do Yahoo! Grupos
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > ----------------------------------------------------------------
--
> --------------------------------------------------------
> > > Atenção! As mensagens deste grupo são de acesso público e de
> inteira
> > > responsabilidade de seus remetentes.
> > > Acesse: http://www.mail-
archive.com/[email protected]/
> > >
> > > ----------------------------------------------------------------
--
> --------------------------------------------------------
> __________________________________________________________________
> > >
> > > Este Grupo recebe o apoio da SQL Magazine -
> > > www.devmedia.com.br/sqlmagazine
> > >
__________________________________________________________________
> > > O grupo Oracle_br não aceita anexos. Quando oferecer algum
> arquivo, tenha
> > > o link do mesmo para evitar trafego(pedidos) desnecessário.
> > >
> > >
> > > *Yahoo! Grupos, um serviço oferecido por:* PUBLICIDADE
> > >
> > >
>
<http://br.ard.yahoo.com/SIG=12frhfk64/M=396559.7942981.9522421.236989
>
3/D=brclubs/S=2137114689:HM/Y=BR/EXP=1149001017/A=3729502/R=2/id=noscr
> ipt/SIG=154dcqslu/*http://lt.dell.com/lt/lt.aspx?
>
CID=13040&LID=340715&DGC=BA&DGSeg=DHS&DURL=http://www1.la.dell.com/con
> tent/products/category.aspx/desktops?c%3dbr%26l%3dpt%26s%3ddhs>
> > > ------------------------------
> > > *Links do Yahoo! Grupos*
> > >
> > > - Para visitar o site do seu grupo na web, acesse:
> > > http://br.groups.yahoo.com/group/oracle_br/
> > >
> > > - Para sair deste grupo, envie um e-mail para:
> > > [EMAIL PROTECTED]<oracle_br-
> [EMAIL PROTECTED]>
> > >
> > > - O uso que você faz do Yahoo! Grupos está sujeito aos
Termos
> do
> > > Serviço do Yahoo! <http://br.yahoo.com/info/utos.html>.
> > >
> > >
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
>
>
>
>
>
>
>
> --------------------------------------------------------------------
--------
> ----------------------------------------------
> Atenção! As mensagens deste grupo são de acesso público e de inteira
> responsabilidade de seus remetentes.
> Acesse: http://www.mail-archive.com/[email protected]/
> --------------------------------------------------------------------
--------
> ----------------------------------------------
______________________________
> ____________________________________
>
> Este Grupo recebe o apoio da SQL Magazine -
www.devmedia.com.br/sqlmagazine
> __________________________________________________________________
> O grupo Oracle_br não aceita anexos. Quando oferecer algum arquivo,
tenha o
> link do mesmo para evitar trafego(pedidos) desnecessário.
> Links do Yahoo! Grupos
>
--------------------------------------------------------------------------------------------------------------------------
Atenção! As mensagens deste grupo são de acesso público e de inteira responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/[email protected]/
--------------------------------------------------------------------------------------------------------------------------__________________________________________________________________
Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine
__________________________________________________________________
O grupo Oracle_br não aceita anexos. Quando oferecer algum arquivo, tenha o link do mesmo para evitar trafego(pedidos) desnecessário.
| Yahoo! Grupos, um serviço oferecido por: | |
|
Links do Yahoo! Grupos
- Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/oracle_br/
- Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]
- O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!.
