[oracle_br] Re: Ajuda Tuning query

2013-02-20 Por tôpico J. Laurindo Chiappa
  Bom, sem nenhuma análise muito profunda (só uma passada de vista), o que 
parece é que quando vc faz o CASE vc está acessando dados da tabela C e ** não 
** usa em lugar nenhum mais do SELECT dados da tabela ST, ENQUANTO na versão 
sem CASE vc faz referência direta às colunas da ST no SELECT via 
,ST.DESCR_STATUS AS DESCR_STATUS : assim sendo, a impressão que temos é que o 
acesso à essa tal ST é que está causando mais demora, TALVEZ por estatísticas 
de má qualidade nessa tabela/coluna... Obtenha um plano de execução COMPLETO 
para as duas versões, ** inclusive ** com as colunas A-ROWS e E-ROWS para se 
poder avaliar o estimado e o obtido, SE houver diferença gritante 
estatisticamente entre os dois, se pode chutar mesmo estatísticas incompletas, 
falta ou aumento de buckets no histograma, por aí...
  
   []s
   
 Chiappa

--- Em oracle_br@yahoogrupos.com.br, Rafael Mendonca raffaell.ti77@... 
escreveu

 Pessoal, bom dia.
 
 Achei um caso estranho em uma query, na segunda coluna do SELECT, quando eu a 
 coloco para retornar o valor da tabela, a consulta demora bastante...
 
 Mas quando eu substituo a segunda coluna por um CASE, ela me traz na 
 velocidade de uma bala, alguém saberia explicar o motivo ? 
 
 Estou com esse probleminha, tentando ajustar a query sem o CASE, só que 
 quando executo a consulta, demora em torno de 2 minutos.
 
 Segue a query sem o CASE e seu plano de execução:
 
 http://sql.nopaste.dk/p21339
 
 
 Segue a query com o CASE e seu plano de execução:
 
 http://sql.nopaste.dk/p21340
 
 
 Obs: me refiro a segunda coluna do SELECT DESCR_STATUS
 
 Já tentei criar um índice para as 2 colunas do filtro da tabela MOVIMENTO_SSF
 
 que melhorou em torno de 30 segundos, mas eu acho que não seja a solução.
 
     SELECT Count(*) FROM MOVIMENTO_SSF -- 2.456.384 registros
     SELECT Count(*) FROM STATUS_PESSOA -- 9   registros
 
 [As partes desta mensagem que não continham texto foram removidas]





Re: [oracle_br] Re: Ajuda Tuning query

2013-02-20 Por tôpico Rafael Mendonca
Chiappa, obrigado pela informação.
Verifiquei na view dba_tab_statistics que essa tabela estava bloqueada para 
estatísicas, desbloquiei e rodei a estatística e aumentou muito a velocidade da 
consulta, mas ainda posso melhorar mais. Descobri que o access FULL na tabela 
de 2 milhoes e 500 mil registros se dá pq todos os registros possuem a coluna 
ID_PRODUTO=5(WHERE SSF.ID_PRODUTO = 5 AND SSF.NSC  0;) , irei conversar com o 
pessoal para saber a causa de todos os registros dessa tabela possuirem o mesmo 
valor do ID_PRODUTO.



 De: J. Laurindo Chiappa jlchia...@yahoo.com.br
Para: oracle_br@yahoogrupos.com.br 
Enviadas: Quarta-feira, 20 de Fevereiro de 2013 10:44
Assunto: [oracle_br] Re: Ajuda Tuning query
 

  
Bom, sem nenhuma análise muito profunda (só uma passada de vista), o que parece 
é que quando vc faz o CASE vc está acessando dados da tabela C e ** não ** usa 
em lugar nenhum mais do SELECT dados da tabela ST, ENQUANTO na versão sem CASE 
vc faz referência direta às colunas da ST no SELECT via ,ST.DESCR_STATUS AS 
DESCR_STATUS : assim sendo, a impressão que temos é que o acesso à essa tal ST 
é que está causando mais demora, TALVEZ por estatísticas de má qualidade nessa 
tabela/coluna... Obtenha um plano de execução COMPLETO para as duas versões, ** 
inclusive ** com as colunas A-ROWS e E-ROWS para se poder avaliar o estimado e 
o obtido, SE houver diferença gritante estatisticamente entre os dois, se pode 
chutar mesmo estatísticas incompletas, falta ou aumento de buckets no 
histograma, por aí...

[]s

Chiappa

--- Em oracle_br@yahoogrupos.com.br, Rafael Mendonca  escreveu

 Pessoal, bom dia.
 
 Achei um caso estranho em uma query, na segunda coluna do SELECT, quando eu a 
 coloco para retornar o valor da tabela, a consulta demora bastante...
 
 Mas quando eu substituo a segunda coluna por um CASE, ela me traz na 
 velocidade de uma bala, alguém saberia explicar o motivo ? 
 
 Estou com esse probleminha, tentando ajustar a query sem o CASE, só que 
 quando executo a consulta, demora em torno de 2 minutos.
 
 Segue a query sem o CASE e seu plano de execução:
 
 http://sql.nopaste.dk/p21339
 
 
 Segue a query com o CASE e seu plano de execução:
 
 http://sql.nopaste.dk/p21340
 
 
 Obs: me refiro a segunda coluna do SELECT DESCR_STATUS
 
 Já tentei criar um índice para as 2 colunas do filtro da tabela MOVIMENTO_SSF
 
 que melhorou em torno de 30 segundos, mas eu acho que não seja a solução.
 
     SELECT Count(*) FROM MOVIMENTO_SSF -- 2.456.384 registros
     SELECT Count(*) FROM STATUS_PESSOA -- 9   registros
 
 [As partes desta mensagem que não continham texto foram removidas]



 

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