Caro chiappa e demais colegas

 

 

 

         Não sei se expressei bem, mas a dúvida que tenho é sobre o uso do
índice dessa tabela no oracle8i.  É o seguinte, coletei as estatísticas
novamente, dessa vez somente usando a dbms_stats com size 10. Mesmo assim a
query não utiliza o índice e faz um full na tabela, porém quando faço um
select count(*) do mesmo select o índice é usado, não entedi. 

 

Sobre o 9i, o que eu fiz foi importar a mesma tabela, deletar as
estatísticas, coletei da mesma forma com a dbms_stats size 10 e aí sim ele
passou a usar o índice, funcionou beleza o problema e que isso não acontece
no 8i. Segue a demonstração no oracle8i.

 

 

 

Para acrescentar segue a configuração de alguns parâmetros

 

object_cache_optimal_size            integer 102400

optimizer_features_enable             string  8.1.7

optimizer_index_caching               integer 90

optimizer_index_cost_adj              integer 35

optimizer_max_permutations          integer 20000

optimizer_mode                           string  FIRST_ROWS

optimizer_percent_parallel             integer 0

 

 

 

 

 

*****************  Teste no 8i *******************************************

 

SQL>  BEGIN

  2   sys.dbms_stats.gather_table_stats(ownname=>'ADMRPC',
tabname=>'RPC_DOCM_DIGITADO',granularity=

>'ALL',method_opt=>'FOR ALL COLUMNS SIZE 10',
estimate_percent=>NULL,cascade=>TRUE, DEGREE=>6);

  3   END;

  4  /

 

Procedimento PL/SQL concluído com sucesso.

 

SQL>  set autotrace trace exp

 

 

 

SQL> Select * from rpc_docm_digitado x where   x.bpa_docm_ext_codigo is not
null;

 

Execution Plan

----------------------------------------------------------

   0      SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=12383 Card=1 Byt

          es=186)

 

   1    0   TABLE ACCESS (FULL) OF 'RPC_DOCM_DIGITADO' (Cost=12383 Card=1
Bytes=186)

 

 

 

Mesmo select com o count(*) 

 

SQL> SELECT COUNT(*) FROM (Select * from rpc_docm_digitado x where
x.bpa_docm_ext_codigo is not null);

 

Execution Plan

----------------------------------------------------------

   0      SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=1 Card=1 Bytes=1

          )

 

   1    0   SORT (AGGREGATE)

   2    1     INDEX (FULL SCAN) OF 'IXBPADOCMEXT_RPC_DOCM_DIG' (UNIQUE)
(Cost=1 Card=1 Bytes=1)

 

 

 

 

 

 

 

 

Sobre histogramas surgiram algumas dúvidas:

 

 

 

   Na documentação do comando analyze, realmente diz que deve ser usada a
cláusula SIZE para coletas dos histogramas, porém achei no site asktom uma
resposta do Tom que reproduzo abaixo, ele diz que o comando sem o SIZE já é
o suficiente para ser coletado os histogramas. 

 

http://asktom.oracle.com/pls/ask/f?p=4950:8:4621149779337497069::NO::F4950_P
8_DISPLAYID,F4950_P8_CRITERIA:707586567563

 

 

You Asked ( <javascript:latestFollowup();> Jump to Tom's latest followup)

Tom
 
Can you give a simple example of how to create a histogram, to see the 
performance of a query?
 
 

 

and we said...

Sure, run a script like this:
 
create table t
as
select 1 X, rpad('*',4000,'*') data from all_objects a
/
insert into t
select 2, rpad('*',4000,'*') from all_objects a where rownum = 1
/
create index t_idx on t(x)
/
 
alter session set sql_trace=true;
 
select count(data) from t t1 where x = 1;
select count(data) from t t1 where x = 2;
 
analyze table t compute statistics
for table
for all indexes
for all indexed columns;
 
select count(data) from t t2 where x = 1;
select count(data) from t t2 where x = 2;
 
 
 
(the for all indexed columns got the histograms for us on the indexed column
X)...
 
 
 
 

Enfim, fiz um teste deletando as estatísticas de uma tabela e coletando-as
de três maneiras diferentes, todas incluem na dba_histograms, sendo que os
valores da coluna ENDPOINT_NUMBER são iguais para os dois últimos. Afinal é
ou não é necessário colocar o SIZE ???

 

 

 

analyze table ADMREF.REF_CAPITULACAO_LEGAL COMPUTE statistics    ;

 

analyze table ADMREF.REF_CAPITULACAO_LEGAL  COMPUTE statistics  for TABLE
for all indexes for all indexed columns;

analyze table ADMREF.REF_CAPITULACAO_LEGAL  COMPUTE statistics  for TABLE
for all indexes for all indexed columns size 10;  ;

 

 

 
 
 

Um abraço

 

Alex Borges

 

 

 

 

 

 

 

 

 

 

  _____  

De: jlchiappa [mailto:[EMAIL PROTECTED] 
Enviada em: sexta-feira, 20 de outubro de 2006 10:52
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Re: ÍNDICE FUNCIONA NO 9i E NÃO FUNC IONA NO 8I

 

Alex, primeira coisa : esses dois comandos de coleta que vc cita são 
ABSOLUTAMENTE diferentes no seu caso, pois no analyze vc ** NÂO ** 
pediu pra criar histogramas (seria a opção SIZE que no analyze vc não 
deu), e no dbms_stats vc especificou SIZE 10, tem histogramas 
portanto, só isso já poderia explicar, ok ? Provavelmente quando vc 
exportou pro 9i, vc exportou depois de ter feito o DBMS_STATS com 
SIZE 10, PORTANTO foi com histogramas, PORTANTO usou normalmente.... 
Recomendo que vc dê uma estudada no manual de Tunning e uma 
pesquisada nas msgs antigas do grupo E em http://asktom.oracle.com,
<http://asktom.oracle.com,>  
histogramas são assunto frequente...

[]s

Chiappa

===========================================================
Participe do ENPO - Encontro de Profissionais Oracle 2006 ! 
Informações e inscrições em www.enpo-br.org
José Laurindo Chiappa, Palestrante ENPO-2006
===========================================================

--- Em oracle_br@yahoogrupos.com.br, "alex_borges" <[EMAIL PROTECTED]> 
escreveu
>
>   Caros colegas
> 
> oracle 8.1.7.4 enterprise
> windows 2000 advanced server
> 
>  
>   Tenho a tabela abaixo com mais de 4 milhoes de registros que 
contém 
> um índice na coluna bpa_docm_ext_codigo.
> Já coletei as estatísticas das duas maneiras abaixo:
>    
> 
> analyze table ADMRPC.RPC_DOCM_DIGITADO compute statistics for TABLE 
> for all indexes for all indexed columns ;
> 
> 
> BEGIN
> sys.dbms_stats.gather_table_stats(ownname=>'ADMRPC',
> tabname=>'RPC_DOCM_DIGITADO',granularity=>'ALL',method_opt=>'FOR 
ALL 
> COLUMNS SIZE 10',
> estimate_percent=>NULL,cascade=>TRUE, DEGREE=>6);
> END;
> 
> 
> 
> 
>   Quando executo o primeiro select ocorre o full scan , mas o 
segundo 
> usa o índice , alguém sabe me dizer porque?
> só existe um registro com esse campo preenchido todos os demais 
estão 
> nulos. Exportei a tabela para versão 9i e o índice foi usado 
conforme 
> esperado.
> 
> 
> 
> 
> 
> SQL> select count(*) from rpc_docm_digitado where 
BPA_DOCM_EXT_CODIGO 
> is null;
> 
>   COUNT(*)
> ----------
>    4465688
> 
> Decorrido: 00:00:25.87
> SQL> select count(*) from rpc_docm_digitado where 
BPA_DOCM_EXT_CODIGO 
> =81;
> 
>   COUNT(*)
> ----------
>          1
> 
> 
> 
> -- primeiro select-----------
> 
> 
> SQL> Select * from rpc_docm_digitado x where 
>   2  x.bpa_docm_ext_codigo is not null;
> Decorrido: 00:00:00.00
> 
> Execution Plan
> ----------------------------------------------------------
>    0      SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=12383 Card=1 
> Bytes=186)
> 
>    1    0   TABLE ACCESS (FULL) OF 'RPC_DOCM_DIGITADO' (Cost=12383 
> Card=1 Bytes=186)
> 
> 
> 
> 
> 
> 
> -- segundo select 
> 
> SQL> SELECT COUNT(*) FROM (Select * from rpc_docm_digitado x where 
>   2  x.bpa_docm_ext_codigo is not null);
> Decorrido: 00:00:00.15
> 
> Execution Plan
> ----------------------------------------------------------
>    0      SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=1 Card=1 
> Bytes=1)
> 
>    1    0   SORT (AGGREGATE)
>    2    1     INDEX (FULL SCAN) OF 'IXBPADOCMEXT_RPC_DOCM_DIG' 
> (UNIQUE) (Cost=1 Card=1 Bytes=1)
>



 



[As partes desta mensagem que não continham texto foram removidas]




Vem aí: ENPO-BR 2006 - Encontro Nacional de Profissionais Oracle
VISITE: http://www.enpo-br.org/ - Dia 11/11 "Vagas Limitadas"
________________________________________________________________
Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine 
--------------------------------------------------------------------------------------------------------------------------
Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--------------------------------------------------------------------------------------------------------------------------
O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: WWW.ORACLEBR.COM.BR 
------------------------------------------------------------------------------------------------------------------------
  
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