[oracle_br] Re: [usuarios_oracle] Ajuda novamente com uso de indices num select banco 10g

2008-06-20 Por tôpico André Alves

Olá Amigos, continuo com o problema de execução forçando o indice e sem o 
indice. Alguém poderia me dar mais uma ajuda??

Fiz o seguinte:

Rodei a query abaixo, 4 vezes seguidas, o tempo dela foi na sequencia:
05:23, 05:08, 05:38 e 05:40.

select count(1) from tb_cdr_detraf a, tb_cdr b where a.id_cdr = b.id and 
b.data_ini between '20-may-08' and '21-may-08'

Rodei a query abaixo, 4 vezes seguidas, o tempo dela foi na sequencia:
02:10, 00:12, 00:13 e 00:13.

select /*+index (b IDX_CDR_UNIQUE) (a TB_CDR_DETRAF_IND01) */
count(1) from tb_cdr_detraf a, tb_cdr b where a.id_cdr = b.id and b.data_ini 
between '20-may-08' and '21-may-08'

Minha dúvida: Como o banco está no modo Custo, rodando estatistica, 
teoricamente eu não devo mais utilizar hint no select certo ? O banco deveria 
escolher qual jeito mais rápido de executar a query. É isso mesmo ?
Se for isso mesmo, nesse caso acredito que o banco não está escolhendo 
corretamente como rodar a 1º query, pq a 2º ficou bem mais rápida, ainda mais 
após a 1º execução.


Qualquer ajuda é bem vinda. 
Obrigado, André

--- Em dom, 15/6/08, Maraisa Aparecida Decker [EMAIL PROTECTED] escreveu:
De: Maraisa Aparecida Decker [EMAIL PROTECTED]
Assunto: Re: [usuarios_oracle] Ajuda com uso de indices num select banco 10g
Para: [EMAIL PROTECTED]
Cc: Grupo Oracle 1 oracle_br@yahoogrupos.com.br
Data: Domingo, 15 de Junho de 2008, 16:37











Bom dia,



pode ocorrer de as estatísticas do oracle não estarem atualizadas, e o

otimizador do oracle acaba por não escolher o melhor plano de execução.



Executa um analyze table para atualizar as statistics.



2008/6/12 André Alves [EMAIL PROTECTED] com.br:



   Olá pessoal, alguém pode me ajudar a entender uma coisa?? Fiz o seguinte

 select num banco 10g

 select count(1) from tb_cdr_detraf a, tb_cdr b where

 a.id_cdr = b.id and b.data_ini between '19-may-08' and '20-may-08'



 SELECT STATEMENT, GOAL = ALL_ROWS Cost=593867 Cardinality= 1 Bytes=19

 SORT AGGREGATE Cardinality= 1 Bytes=19

 FILTER

 HASH JOIN Cost=593867 Cardinality= 813000 Bytes=15447000

 INDEX FAST FULL SCAN Object owner=DBTRANS Object name=TB_CDR_ DETRAF_IND01

 Cost=390 Cardinality= 813000 Bytes=4878000

 PARTITION RANGE ITERATOR Cost=591156 Cardinality= 1650846 Bytes=21460998

 TABLE ACCESS FULL Object owner=DBTRANS Object name=TB_CDR Cost=591156

 Cardinality= 1650846 Bytes=21460998



 O plano de execução fez um acesso FULL na tabela TB_CDR. Depois rodei o

 seguinte:



 select /*+index (b IDX_CDR_UNIQUE) (a TB_CDR_DETRAF_ IND01) */

 count(1) from tb_cdr_detraf a, tb_cdr b where

 a.id_cdr = b.id and b.data_ini between '19-may-08' and '20-may-08'



 SELECT STATEMENT, GOAL = ALL_ROWS Cost=1825205 Cardinality= 1 Bytes=19

 SORT AGGREGATE Cardinality= 1 Bytes=19

 FILTER

 HASH JOIN Cost=1825205 Cardinality= 813000 Bytes=15447000

 INDEX FAST FULL SCAN Object owner=DBTRANS Object name=TB_CDR_ DETRAF_IND01

 Cost=390 Cardinality= 813000 Bytes=4878000

 TABLE ACCESS BY GLOBAL INDEX ROWID Object owner=DBTRANS Object name=TB_CDR

 Cost=1822494 Cardinality= 1650846 Bytes=21460998

 INDEX RANGE SCAN Object owner=DBTRANS Object name=IDX_CDR_ UNIQUE Cost=10870

 Cardinality= 1650846

 Fiz o que eu na teoria pensando em regra acho certo, ele usou os devidos

 indices.



 A 1º query rodou em 500 segundos. A 2º em 87. Ai vem a questão: se o 1º

 plano o Oracle decidiu pelo uso das estatisticas que o acesso FULL nas duas

 tabelas era melhor. Pq não foi ? É isso mesmo ?



 Obrigado a todos,

 André



  - - ---

 Abra sua conta no Yahoo! Mail, o único sem limite de espaço para

 armazenamento!



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



 





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




  




 

















  Abra sua conta no Yahoo! Mail, o único sem limite de espaço para 
armazenamento!
http://br.mail.yahoo.com/

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



Re: [oracle_br] Re: [usuarios_oracle] Ajuda novamente com uso de indices num select banco 10g

2008-06-20 Por tôpico Thiago Azevedo
Mande as seguintes informações:


1-) Qual a versão do banco?
2-) Como vc esta coletando estatísticas  para essa tabela??? ANALYZE ou
DBMS_STATS ???
3-) Está coletando para os índices também?
4-) Está gerando histogramas para as colunas utilizadas nas restrições?

Abçs



2008/6/20 André Alves [EMAIL PROTECTED]:


 Olá Amigos, continuo com o problema de execução forçando o indice e sem o
 indice. Alguém poderia me dar mais uma ajuda??

 Fiz o seguinte:

 Rodei a query abaixo, 4 vezes seguidas, o tempo dela foi na sequencia:
 05:23, 05:08, 05:38 e 05:40.

 select count(1) from tb_cdr_detraf a, tb_cdr b where a.id_cdr = b.id and
 b.data_ini between '20-may-08' and '21-may-08'

 Rodei a query abaixo, 4 vezes seguidas, o tempo dela foi na sequencia:
 02:10, 00:12, 00:13 e 00:13.

 select /*+index (b IDX_CDR_UNIQUE) (a TB_CDR_DETRAF_IND01) */
 count(1) from tb_cdr_detraf a, tb_cdr b where a.id_cdr = b.id and
 b.data_ini between '20-may-08' and '21-may-08'

 Minha dúvida: Como o banco está no modo Custo, rodando estatistica,
 teoricamente eu não devo mais utilizar hint no select certo ? O banco
 deveria escolher qual jeito mais rápido de executar a query. É isso mesmo ?
 Se for isso mesmo, nesse caso acredito que o banco não está escolhendo
 corretamente como rodar a 1º query, pq a 2º ficou bem mais rápida, ainda
 mais após a 1º execução.

 Qualquer ajuda é bem vinda.
 Obrigado, André

 --- Em dom, 15/6/08, Maraisa Aparecida Decker [EMAIL 
 PROTECTED]maraisadecker%40gmail.com
 escreveu:
 De: Maraisa Aparecida Decker [EMAIL PROTECTED]maraisadecker%40gmail.com
 
 Assunto: Re: [usuarios_oracle] Ajuda com uso de indices num select banco
 10g
 Para: [EMAIL PROTECTED]usuarios_oracle%40yahoogrupos.com.br
 Cc: Grupo Oracle 1 
 oracle_br@yahoogrupos.com.broracle_br%40yahoogrupos.com.br
 
 Data: Domingo, 15 de Junho de 2008, 16:37

 Bom dia,

 pode ocorrer de as estatísticas do oracle não estarem atualizadas, e o

 otimizador do oracle acaba por não escolher o melhor plano de execução.

 Executa um analyze table para atualizar as statistics.

 2008/6/12 André Alves [EMAIL PROTECTED] com.br:

  Olá pessoal, alguém pode me ajudar a entender uma coisa?? Fiz o seguinte

  select num banco 10g

  select count(1) from tb_cdr_detraf a, tb_cdr b where

  a.id_cdr = b.id and b.data_ini between '19-may-08' and '20-may-08'

 

  SELECT STATEMENT, GOAL = ALL_ROWS Cost=593867 Cardinality= 1 Bytes=19

  SORT AGGREGATE Cardinality= 1 Bytes=19

  FILTER

  HASH JOIN Cost=593867 Cardinality= 813000 Bytes=15447000

  INDEX FAST FULL SCAN Object owner=DBTRANS Object name=TB_CDR_
 DETRAF_IND01

  Cost=390 Cardinality= 813000 Bytes=4878000

  PARTITION RANGE ITERATOR Cost=591156 Cardinality= 1650846 Bytes=21460998

  TABLE ACCESS FULL Object owner=DBTRANS Object name=TB_CDR Cost=591156

  Cardinality= 1650846 Bytes=21460998

 

  O plano de execução fez um acesso FULL na tabela TB_CDR. Depois rodei o

  seguinte:

 

  select /*+index (b IDX_CDR_UNIQUE) (a TB_CDR_DETRAF_ IND01) */

  count(1) from tb_cdr_detraf a, tb_cdr b where

  a.id_cdr = b.id and b.data_ini between '19-may-08' and '20-may-08'

 

  SELECT STATEMENT, GOAL = ALL_ROWS Cost=1825205 Cardinality= 1 Bytes=19

  SORT AGGREGATE Cardinality= 1 Bytes=19

  FILTER

  HASH JOIN Cost=1825205 Cardinality= 813000 Bytes=15447000

  INDEX FAST FULL SCAN Object owner=DBTRANS Object name=TB_CDR_
 DETRAF_IND01

  Cost=390 Cardinality= 813000 Bytes=4878000

  TABLE ACCESS BY GLOBAL INDEX ROWID Object owner=DBTRANS Object
 name=TB_CDR

  Cost=1822494 Cardinality= 1650846 Bytes=21460998

  INDEX RANGE SCAN Object owner=DBTRANS Object name=IDX_CDR_ UNIQUE
 Cost=10870

  Cardinality= 1650846

  Fiz o que eu na teoria pensando em regra acho certo, ele usou os devidos

  indices.

 

  A 1º query rodou em 500 segundos. A 2º em 87. Ai vem a questão: se o 1º

  plano o Oracle decidiu pelo uso das estatisticas que o acesso FULL nas
 duas

  tabelas era melhor. Pq não foi ? É isso mesmo ?

 

  Obrigado a todos,

  André

 

   - - ---

  Abra sua conta no Yahoo! Mail, o único sem limite de espaço para

  armazenamento!

 

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

 

 

 

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











 Abra sua conta no Yahoo! Mail, o único sem limite de espaço para
 armazenamento!
 http://br.mail.yahoo.com/

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

  




-- 
Thiago Azevedo
Accenture Brazil
Services - AO Carrefour
Work: 55 11 51888492
Mobile: 55 13 81453524
email: [EMAIL PROTECTED]
MSN IM: [EMAIL PROTECTED]


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



Re: [oracle_br] Re: [usuarios_oracle] Ajuda novamente com uso de indices num select banco 10g

2008-06-20 Por tôpico André Alves
Olá Thiago, Seguem as informações:


1-) Qual a versão do banco?
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit 

2-) Como vc esta coletando estatísticas  para essa tabela??? ANALYZE ou

DBMS_STATS ???
Com DBMS_STATS, para todos os usuários através do comando
select 'execute dbms_stats.gather_schema_stats ('''||username||''');'  from dba_

users;


3-) Está coletando para os índices também?
Não sei, mas como estou coletando por usuário então acho que deveria ir no bolo 
tb. Mas qual o comando para fazer só com os indices??



4-) Está gerando histogramas para as colunas utilizadas nas restrições?
Não. Como faço isso


Obrigado mais uma vez, abs, André
--- Em sex, 20/6/08, Thiago Azevedo [EMAIL PROTECTED] escreveu:
De: Thiago Azevedo [EMAIL PROTECTED]
Assunto: Re: [oracle_br] Re: [usuarios_oracle] Ajuda novamente com uso de 
indices num select banco 10g
Para: oracle_br@yahoogrupos.com.br
Data: Sexta-feira, 20 de Junho de 2008, 10:45











Mande as seguintes informações:



1-) Qual a versão do banco?

2-) Como vc esta coletando estatísticas  para essa tabela??? ANALYZE ou

DBMS_STATS ???

3-) Está coletando para os índices também?

4-) Está gerando histogramas para as colunas utilizadas nas restrições?



Abçs



2008/6/20 André Alves [EMAIL PROTECTED] com.br:





 Olá Amigos, continuo com o problema de execução forçando o indice e sem o

 indice. Alguém poderia me dar mais uma ajuda??



 Fiz o seguinte:



 Rodei a query abaixo, 4 vezes seguidas, o tempo dela foi na sequencia:

 05:23, 05:08, 05:38 e 05:40.



 select count(1) from tb_cdr_detraf a, tb_cdr b where a.id_cdr = b.id and

 b.data_ini between '20-may-08' and '21-may-08'



 Rodei a query abaixo, 4 vezes seguidas, o tempo dela foi na sequencia:

 02:10, 00:12, 00:13 e 00:13.



 select /*+index (b IDX_CDR_UNIQUE) (a TB_CDR_DETRAF_ IND01) */

 count(1) from tb_cdr_detraf a, tb_cdr b where a.id_cdr = b.id and

 b.data_ini between '20-may-08' and '21-may-08'



 Minha dúvida: Como o banco está no modo Custo, rodando estatistica,

 teoricamente eu não devo mais utilizar hint no select certo ? O banco

 deveria escolher qual jeito mais rápido de executar a query. É isso mesmo ?

 Se for isso mesmo, nesse caso acredito que o banco não está escolhendo

 corretamente como rodar a 1º query, pq a 2º ficou bem mais rápida, ainda

 mais após a 1º execução.



 Qualquer ajuda é bem vinda.

 Obrigado, André



 --- Em dom, 15/6/08, Maraisa Aparecida Decker maraisadecker@ 
 gmail.commaraisadecker% 40gmail.com 

 escreveu:

 De: Maraisa Aparecida Decker maraisadecker@ gmail.commaraisadecker% 
 40gmail.com

 

 Assunto: Re: [usuarios_oracle] Ajuda com uso de indices num select banco

 10g

 Para: usuarios_oracle@ yahoogrupos. com.brusuarios_oracle% 40yahoogrupos. 
 com.br

 Cc: Grupo Oracle 1 [EMAIL PROTECTED] os.com.broracle_br%40yahoog 
 rupos.com. br

 

 Data: Domingo, 15 de Junho de 2008, 16:37



 Bom dia,



 pode ocorrer de as estatísticas do oracle não estarem atualizadas, e o



 otimizador do oracle acaba por não escolher o melhor plano de execução.



 Executa um analyze table para atualizar as statistics.



 2008/6/12 André Alves [EMAIL PROTECTED] com.br:



  Olá pessoal, alguém pode me ajudar a entender uma coisa?? Fiz o seguinte



  select num banco 10g



  select count(1) from tb_cdr_detraf a, tb_cdr b where



  a.id_cdr = b.id and b.data_ini between '19-may-08' and '20-may-08'



 



  SELECT STATEMENT, GOAL = ALL_ROWS Cost=593867 Cardinality= 1 Bytes=19



  SORT AGGREGATE Cardinality= 1 Bytes=19



  FILTER



  HASH JOIN Cost=593867 Cardinality= 813000 Bytes=15447000



  INDEX FAST FULL SCAN Object owner=DBTRANS Object name=TB_CDR_

 DETRAF_IND01



  Cost=390 Cardinality= 813000 Bytes=4878000



  PARTITION RANGE ITERATOR Cost=591156 Cardinality= 1650846 Bytes=21460998



  TABLE ACCESS FULL Object owner=DBTRANS Object name=TB_CDR Cost=591156



  Cardinality= 1650846 Bytes=21460998



 



  O plano de execução fez um acesso FULL na tabela TB_CDR. Depois rodei o



  seguinte:



 



  select /*+index (b IDX_CDR_UNIQUE) (a TB_CDR_DETRAF_ IND01) */



  count(1) from tb_cdr_detraf a, tb_cdr b where



  a.id_cdr = b.id and b.data_ini between '19-may-08' and '20-may-08'



 



  SELECT STATEMENT, GOAL = ALL_ROWS Cost=1825205 Cardinality= 1 Bytes=19



  SORT AGGREGATE Cardinality= 1 Bytes=19



  FILTER



  HASH JOIN Cost=1825205 Cardinality= 813000 Bytes=15447000



  INDEX FAST FULL SCAN Object owner=DBTRANS Object name=TB_CDR_

 DETRAF_IND01



  Cost=390 Cardinality= 813000 Bytes=4878000



  TABLE ACCESS BY GLOBAL INDEX ROWID Object owner=DBTRANS Object

 name=TB_CDR



  Cost=1822494 Cardinality= 1650846 Bytes=21460998



  INDEX RANGE SCAN Object owner=DBTRANS Object name=IDX_CDR_ UNIQUE

 Cost=10870



  Cardinality= 1650846



  Fiz o que eu na teoria pensando em regra acho certo, ele usou os devidos



  indices.



 



  A 1º query rodou em 500 segundos. A 2º em 87. Ai vem