SQL esta demorando muito, mais em outro banco vai rápido

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
HenriqueMachado
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Seg, 29 Mai 2006 1:24 pm
Localização: Blumenau - SC
Abraços,
Henrique Machado Muller

Bom pessoal estou com um problema.

Tenho dois bancos diferentes.
Um com a versão oracle 10.1.0.4.0
Outro com a versão 10.2.0.3.0

Bom o mesmo sql, com bases igual, indexes iguais e tabelas iguais.
Em um banco esta denorando 1 segundo, em outro demora 1minuto e 30 segundos.
Este é o comando

Selecionar tudo

SELECT DISTINCT pda.id_parcela
              , a.*
              , ROUND (a.vlr_autenticado, 2) AS real_autenticado
              , a.vlr_pagar real_pagar
              , b.sigla BANCO
              , s.descricao AS situacao
           FROM PARCELA_DOC_ARRECADACAO pda, ARRECADACAO a, ARRECADACAO_SITUACAO s, DOC_ARRECADACAO doc, BANCO b
          WHERE b.id_banco(+) = a.id_banco
            AND a.id_arrecadacao_situacao = s.id_arrecadacao_situacao
            AND doc.numero_controle(+) = a.numero_controle
            AND pda.id_doc_arrecadacao(+) = doc.id_doc_arrecadacao
            AND pda.id_parcela = 10791084
Se eu tirar o sinal de (+) vai rápido nos dois bancos, mais dai minha regra de negocio não funciona.

Olha o plano de execução em cada banco

No 10.1.0.4.0

Selecionar tudo

Operation	Object Name	Rows	Bytes	Cost	Object Node	In/Out	PStart	PStop

SELECT STATEMENT Optimizer Mode=CHOOSE		1  	 	47601  	 	      	             	 
  SORT UNIQUE		1  	168  	47601  	 	      	             	 
    NESTED LOOPS		1  	168  	47600  	 	      	             	 
      NESTED LOOPS OUTER		1  	142  	47599  	 	      	             	 
        HASH JOIN		1  	131  	47598  	 	      	             	 
          TABLE ACCESS BY INDEX ROWID	BLU.PARCELA_DOC_ARRECADACAO	1  	12  	4  	 	      	             	 
            INDEX RANGE SCAN	BLU.IDX_PADOAR_ID_PARCELA	1  	 	3  	 	      	             	 
          HASH JOIN RIGHT OUTER		1 M	206 M	47581  	 	      	             	 
           TABLE ACCESS FULL	BLU.DOC_ARRECADACAO	2 M	59 M	20520  	 	      	             	 
            TABLE ACCESS FULL	BLU.ARRECADACAO	1 M	168 M	6406  	 	      	             	 
        TABLE ACCESS BY INDEX ROWID	BLU.BANCO	1  	11  	1  	 	      	             	 
          INDEX UNIQUE SCAN	BLU.IDX_PK_BANC	1  	 	0  	 	      	             	 
      TABLE ACCESS BY INDEX ROWID	BLUI.ARRECADACAO_SITUACAO	1  	26  	1  	 	      	             	 
        INDEX UNIQUE SCAN	BLU.IDX_PK_ARSI	1  	 	0  	 	      	             	 
No 10.2.0.3.0

Selecionar tudo

Operation	Object Name	Rows	Bytes	Cost	Object Node	In/Out	PStart	PStop

SELECT STATEMENT Optimizer Mode=CHOOSE		1  	 	8  	 	      	             	 
  HASH UNIQUE		1  	187  	8  	 	      	             	 
    NESTED LOOPS OUTER		1  	187  	7  	 	      	             	 
      NESTED LOOPS		1  	176  	6  	 	      	             	 
        NESTED LOOPS		1  	150  	5  	 	      	             	 
          NESTED LOOPS		1  	34  	4  	 	      	             	 
            TABLE ACCESS BY INDEX ROWID	BLU.PARCELA_DOC_ARRECADACAO	1  	12  	3  	 	      	             	 
              INDEX RANGE SCAN	BLU.IDX_PADOAR_ID_PARCELA	1  	 	2  	 	      	             	 
            TABLE ACCESS BY INDEX ROWID	BLU.DOC_ARRECADACAO	1  	22  	1  	 	      	             	 
              INDEX UNIQUE SCAN	BLU.IDX_PK_DOAR	1  	 	1  	 	      	             	 
          TABLE ACCESS BY INDEX ROWID	BLU.ARRECADACAO	1  	116  	1  	 	      	             	 
            INDEX RANGE SCAN	BLU.IDX_ARRE_NUMERO_CONTROLE	1  	 	1  	 	      	             	 
        TABLE ACCESS BY INDEX ROWID	BLU.ARRECADACAO_SITUACAO	1  	26  	1  	 	      	             	 
          INDEX UNIQUE SCAN	BLU.IDX_PK_ARSI	1  	 	1  	 	      	             	 
      TABLE ACCESS BY INDEX ROWID	BLU.BANCO	1  	11  	1  	 	      	             	 
        INDEX UNIQUE SCAN	BLU.IDX_PK_BANC	1  	 	1  	 	      	             	 

alguém poderia a me ajudar a revolver este problema.
será que é alguma configuração de banco??
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Será que ambos tem o mesmo número de linhas? Será que foi coletado estatísticas de ambos de forma igual?
HenriqueMachado
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Seg, 29 Mai 2006 1:24 pm
Localização: Blumenau - SC
Abraços,
Henrique Machado Muller

Será que ambos tem o mesmo número de linhas?
Bom o banco que esta demorando muito é um dump de 1 dia atrás do que vai rápido. ou seja o numero de linha é bem aproximado.
Será que foi coletado estatísticas de ambos de forma igual?
Não saberei te responder.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

De cara, pode testar o LAST_ANALYZED dos 2 bancos!

Selecionar tudo

SQL> select last_analyzed
  2  from all_tables
  3  where table_name='PESSOA'
  4  /

LAST_ANALYZ
-----------
19-AUG-2007
Como eu não sou DBA, talvez tenha outras formas melhores de testar isso.
HenriqueMachado
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Seg, 29 Mai 2006 1:24 pm
Localização: Blumenau - SC
Abraços,
Henrique Machado Muller

Executei o sql acima, e nos dois bancos o LAST_ANALYZED esta com data de 16/08/2007 Dentre as tabelas envolvidas no sql.

É possivel que seja alguma configuração de banco??
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 24 visitantes