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