Entedi, obrigado, nao sabia que o profiler era soh para pl...

quanto ao autotrace consegui as informacoes

COM INDICE :

  Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        142  consistent gets
          0  physical reads
          0  redo size
      18795  bytes sent via SQL*Net to client
       8050  bytes received via SQL*Net from client
         70  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
       1000  rows processed

SEM INDICE :


  Statistics
---------------------------------------------------------
         0  recursive calls
         5  db block gets
       252  consistent gets
       182  physical reads
         0  redo size
     18796  bytes sent via SQL*Net to client
      8002  bytes received via SQL*Net from client
        70  SQL*Net roundtrips to/from client
         2  sorts (memory)
         0  sorts (disk)
      1000  rows processed

Lendo um artigo do site ASKTOM ele disse que ignora os "physical reads" ,
posso mesmo fazer isso ?
Outra coisa, pelo que entendi ele leva apenas em conta o "consistent
gets"....
tem mais alguma informacao relevante de todas essas do trace ?
ou realmente a "consistent gets" é a principal

Tendo "consistent gets" menores , a query é melhor ? é isso mesmo ?

eu estava olhando o concepts e pelo que entendi :
physical reads -> Leitura fisica, numero de vezes que os blocos fisicos de
dados sao acessados
consistent gets -> eu li mas nào entendi.... parece que é a leitura de
memoria.... ou consitencia de memoria com disco... talvez locks...
talvez acesso ao database buffer cache....

mas como isso pode ser mais custoso do que leitura fisica ?

e mais uma coisa....
usar o explain plan gera o custo para fazer o select ?
pois eu executando explain for.....
e nao traz nada de custo... apenas informacoes como uso de indice etc.....
select * from plan_Table

Muito Obrigado.

On 1/11/06, jlchiappa <[EMAIL PROTECTED]> wrote:
>
>  profiler te mostra tempo de execução do PL/SQL, pra vc ver detalhes
> sobre o SQL (ie, plano, estatísticas se usando CBO, etc), o negócio é
> trace + tkprof, ou ao menos AUTOTRACE, como mostrado lá nos exemplos
> sobre FBI que passaram há uns dias pelo grupo.
>
> []s
>
> Chiappa
> --- Em oracle_br@yahoogrupos.com.br, Marcelo Cauduro <[EMAIL PROTECTED]>
> escreveu
> >
> > Pessoal, estou fazendo o seguinte teste, para ter certeza no uso de
> um
> > indice
> > Tenho uma tabela com 40000 registro, que vai crescer muito
> ainda.,....
> > muito muito mesmo....
> > ela ta pequenininha...
> >
> > tem um campo date preenchido na maior parte do registros , que
> algumas vezes
> > será nullo,
> > fiz uma funcao para pegar esse nulos sem ter que usar o is nulll, e
> quero
> > ter certeza
> > de que isso signifara ganho...
> >
> > Mas não sei se o meio qual estou fazendo o uso do DBMS_Profiler é o
> > melhor...
> > essa é a melhor maneira de fazer o meu teste ?
> >
> > O teste esta abaixo e as conclusoes que cheguei são péssimas....
> >
> > Inserções :
> >
> > Obtive :
> > -------------------------------------------------
> > Sem indice
> >   TESTE_FCT    PROCEDURE    3672,726
> >   ANONYMOUS BLOCK    0,531
> > Com indice
> >     TESTE_FCT    PROCEDURE    5786,678
> >   T_TRUNC    FUNCTION    199,851
> >   ANONYMOUS BLOCK    0,361
> >   ao todo 5986,529
> >
> >  Com indice ficou 63% mais lento
> > -------------------------------------------------
> > Consultas:
> >
> > Sem indice
> >   1    <anonymous>    <anonymous>    ANONYMOUS BLOCK    0,228
> > Com idice
> >   1    <anonymous>    <anonymous>    ANONYMOUS BLOCK    0,223
> >
> >   Nao tive ganhos significativos
> >
> >
> >
> >   NAO TEM ALGUM COISA ERRADA ?
> >
> > -------------------------------------------------
> >
> > TESTE :
> >
> > 1 Passo -
> >   Criar Tabela
> >
> >   create table teste_function (a date,b number);
> >
> > 2 Passo -
> >   Criar function de indice:
> >
> >   create or replace function t_trunc(a date) return NUMBER
> deterministic
> >   as
> >   begin
> >   --
> >     if a is NOT null then
> >     --
> >       return null;
> >     --
> >     end if;
> >     --
> >     return 1;
> >   --
> >   end;
> >
> > 3 Passo :
> >
> >   Usar o dbms_profiler para verificar quanto demora para inserir
> sem a
> > funcao com indice e ver a perda,
> >   e ver se compensa na hora de fazer as queries
> >
> >   -- Dispara o profiler
> >   select decode(dbms_profiler.start_profiler, '0', 'Profiler
> started',
> > 'Profiler error')
> >   from   dual;
> >
> >   create or replace procedure teste_fct as
> >   begin
> >   for ct in 1..20000 loop
> >     insert into teste_function values (sysdate,1);
> >   end loop;
> >   end;
> >
> >   call teste_fct()
> >
> >   -- Execute o código
> >
> >   -- Para a execução
> >   select decode(dbms_profiler.stop_profiler, '0', 'Profiler
> stopped',
> > 'Profiler error')
> >   from   dual;
> >   -- Salva nas tabelas
> >   select decode(dbms_profiler.flush_data, '0', 'Profiler
> flushed', 'Profiler
> > error')
> >   from   dual;
> >   -- Retorna o número do processo
> >   select 'runid:' || plsql_profiler_runnumber.currval
> >   from   dual;
> >
> >    select u.unit_owner, u.unit_name, u.unit_type, sum
> (d.total_time/1000000)
> > as  total_time
> >   from   plsql_profiler_data d, plsql_profiler_units u
> >   where  u.runid = d.runid
> >          and u.runid = 137 --> insira o número do processo
> >          and u.unit_number = d.unit_number
> >   group by  u.unit_owner, u.unit_name, u.unit_type
> >   order by total_time desc
> >
> >   Obtive :
> >   TESTE_FCT    PROCEDURE    3672,726
> >   ANONYMOUS BLOCK    0,531
> >
> > 4 Passo :
> >
> >   Usar o dbms_profiler para verificar quanto demora para inserir
> com a
> > funcao com indice e ver a perda,
> >   e ver se compensa na hora de fazer as queries
> >
> >   --> Criei dois indices para teste, um usando uma funcao do
> sistema (a
> > trunc) e outro usando uma funcao criado por mim
> >
> >   create index ITESTANDO_FUNCTION on teste_function(t_trunc(a))
> >
> >   -- Dispara o profiler
> >   select decode(dbms_profiler.start_profiler, '0', 'Profiler
> started',
> > 'Profiler error')
> >   from   dual;
> >
> >   create or replace procedure teste_fct as
> >   begin
> >   for ct in 1..20000 loop
> >     insert into teste_function values (sysdate,1);
> >   end loop;
> >   end;
> >
> >   call teste_fct()
> >
> >   -- Execute o código
> >
> >   -- Para a execução
> >   select decode(dbms_profiler.stop_profiler, '0', 'Profiler
> stopped',
> > 'Profiler error')
> >   from   dual;
> >   -- Salva nas tabelas
> >   select decode(dbms_profiler.flush_data, '0', 'Profiler
> flushed', 'Profiler
> > error')
> >   from   dual;
> >   -- Retorna o número do processo
> >   select 'runid:' || plsql_profiler_runnumber.currval
> >   from   dual;
> >
> >    select u.unit_owner, u.unit_name, u.unit_type, sum
> (d.total_time/1000000)
> > as  total_time
> >   from   plsql_profiler_data d, plsql_profiler_units u
> >   where  u.runid = d.runid
> >          and u.runid = 138 --> insira o número do processo
> >          and u.unit_number = d.unit_number
> >   group by  u.unit_owner, u.unit_name, u.unit_type
> >   order by total_time desc
> >
> >   TESTE_FCT    PROCEDURE    5786,678
> >   T_TRUNC    FUNCTION    199,851
> >   ANONYMOUS BLOCK    0,361
> >
> > 6 Passo :
> >
> >   --> insere valores null
> >     create or replace procedure teste_fct as
> >   begin
> >   for ct in 1..1000 loop
> >     insert into teste_function values (null,1);
> >   end loop;
> >   end;
> >
> >   call teste_fct()
> >
> >
> > 7 Passo :
> >
> >   Busca sem indice
> >
> >   -- Dispara o profiler
> >   select decode(dbms_profiler.start_profiler, '0', 'Profiler
> started',
> > 'Profiler error')
> >   from   dual;
> >
> >   -- Execute o código
> >   select * from teste_function
> >   where a is null;
> >
> >   -- Para a execução
> >   select decode(dbms_profiler.stop_profiler, '0', 'Profiler
> stopped',
> > 'Profiler error')
> >   from   dual;
> >   -- Salva nas tabelas
> >   select decode(dbms_profiler.flush_data, '0', 'Profiler
> flushed', 'Profiler
> > error')
> >   from   dual;
> >   -- Retorna o número do processo
> >   select 'runid:' || plsql_profiler_runnumber.currval
> >   from   dual;
> >
> >    select u.unit_owner, u.unit_name, u.unit_type, sum
> (d.total_time/1000000)
> > as  total_time
> >   from   plsql_profiler_data d, plsql_profiler_units u
> >   where  u.runid = d.runid
> >          and u.runid = 145 --> insira o número do processo
> >          and u.unit_number = d.unit_number
> >   group by  u.unit_owner, u.unit_name, u.unit_type
> >   order by total_time desc
> >
> >   1    <anonymous>    <anonymous>    ANONYMOUS BLOCK    0,241
> >
> > 8 Passo :
> >
> >   Busca com indice
> >
> >   -- Dispara o profiler
> >   select decode(dbms_profiler.start_profiler, '0', 'Profiler
> started',
> > 'Profiler error')
> >   from   dual;
> >
> >   -- Execute o código
> >   select /*+ INDEX(teste_function ITESTANDO_FUNCTION) */ * from
> > teste_function
> >   where t_trunc(a)=1;
> >
> >   -- Para a execução
> >   select decode(dbms_profiler.stop_profiler, '0', 'Profiler
> stopped',
> > 'Profiler error')
> >   from   dual;
> >   -- Salva nas tabelas
> >   select decode(dbms_profiler.flush_data, '0', 'Profiler
> flushed', 'Profiler
> > error')
> >   from   dual;
> >   -- Retorna o número do processo
> >   select 'runid:' || plsql_profiler_runnumber.currval
> >   from   dual;
> >
> >    select u.unit_owner, u.unit_name, u.unit_type, sum
> (d.total_time/1000000)
> > as  total_time
> >   from   plsql_profiler_data d, plsql_profiler_units u
> >   where  u.runid = d.runid
> >          and u.runid = 143 --> insira o número do processo
> >          and u.unit_number = d.unit_number
> >   group by  u.unit_owner, u.unit_name, u.unit_type
> >   order by total_time desc
> >
> >   1    <anonymous>    <anonymous>    ANONYMOUS BLOCK    0,228
> >
> >
> > [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/oracle_br@yahoogrupos.com.br/
>
> --------------------------------------------------------------------------------------------------------------------------_____________________________________________________________________
> Area de download do grupo - http://www.4shared.com/dir/101727/a4dcc423
>
>
>  *Yahoo! Grupos, um serviço oferecido por:*  PUBLICIDADE
> <http://br.rd.yahoo.com/SIG=12fktc4i1/M=387526.7663462.8676324.1588051/D=brclubs/S=2137114689:HM/Y=BR/EXP=1136997952/A=3221952/R=2/id=noscript/SIG=16ehti2go/*http://landingstrip.dell.com/landingstrip/ls.asp?CID=10076&LID=289961&DGC=BA&DGStor=DHS&DGSite=Yahoo&Conum=BR&DURL=http://www1.la.dell.com/content/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]<[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/oracle_br@yahoogrupos.com.br/ 
--------------------------------------------------------------------------------------------------------------------------_____________________________________________________________________
Area de download do grupo - http://www.4shared.com/dir/101727/a4dcc423  
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:
    http://br.yahoo.com/info/utos.html

 


Responder a