- Este tópico contém 8 respostas, 2 vozes e foi atualizado pela última vez 16 anos atrás por
gsmdf.
-
AutorPosts
-
3 de março de 2010 às 3:56 pm #92922
gsmdf
ParticipantePessoal,
Meu problema atual é que, quando busco por 6 triplas não há table access fulls e retorna o resultado em 2 segundos.
Quando coloco 1 tripla a mais, somando 7, o oracle então muda por algum motivo o algorítmo e demora 2 minutos para me retornar o resultado, com vários table access full.O selelect é:
SELECT COUNT ( * )
FROM tcu.vw_esc_del vw
WHERE (vw.cod_processo, vw.cod_apreciacao, vw.seq_deliberacao) in
(
( 556093 , 3141216 , 33),
( 556093 , 3141216 , 36),
( 556093 , 3141216 , 37),
( 556093 , 3141216 , 38),
( 556093 , 3141216 , 39),
( 556093 , 3141216 , 40)
,( 564848 , 3141205 , 1)
)
Apenas com essas informações alguém consegue me dizer qual jeito possível de forçar o oracle a continuar seguindo o primeiro algorítmo de busca?
Grato.
3 de março de 2010 às 9:57 pm #92946VitorLeandro
ParticipanteMostre o plano com esse Hint:
SELECT /*+ INDEX(vw)*/ COUNT ( * )
FROM tcu.vw_esc_del vw
WHERE (vw.cod_processo, vw.cod_apreciacao, vw.seq_deliberacao) in
(
( 556093 , 3141216 , 33),
( 556093 , 3141216 , 36),
( 556093 , 3141216 , 37),
( 556093 , 3141216 , 38),
( 556093 , 3141216 , 39),
( 556093 , 3141216 , 40)
,( 564848 , 3141205 , 1)
)Tambem confira se as estatísticas do Index e da tabela estão atualizadas, se não tiver, colete novamente!
4 de março de 2010 às 4:58 pm #92956gsmdf
ParticipanteDesculpe meu parco conhecimento, mas atualizar as estatísticas de qual tabela e qual índice?Das tabelas que a view é feita?
Tentei dar um ANALYZE index tcu.vw compute statistics; e fala que o índice não existe.
Pelo menos sem essas estatísticas atualizadas, apenas a hint não funcionou não.4 de março de 2010 às 5:11 pm #92957VitorLeandro
ParticipanteEsse Hint não funcionou? Então pegue o script da view e veja o plano de execução através do script. Se possível, poste aí. Sobre as estatisticas, a coleta é feita para as tabelas constam no script da view e indexes que constam nessas tabelas..
4 de março de 2010 às 5:52 pm #92958gsmdf
ParticipanteAtualizei as estatísticas das 2 tabelas e continuou não funcionando.
Como você pode perceber no script essa view ainda essa ramifica em outra view que se ramifica em 5 views cada uma com várias tabelas, ai não atualizei cada tabela dessas.Script:
DROP VIEW TCU.VW_ESC_DEL;/* Formatted on 2010/03/04 10:44 (Formatter Plus v4.8.8) */
CREATE OR REPLACE FORCE VIEW tcu.vw_esc_del (cod_processo,
cod_apreciacao,
seq_deliberacao,
tipo_deliberacao,
ano_processo,
num_processo,
cod_tipo_decisao,
num_decisao,
ano_decisao,
cod_colegiado_decisao,
DATA,
numdelib,
item,
apreciador,
descr,
processo,
cod_tipo_autor
) AS
SELECT a.cod_processo cod_processo, a.cod cod_apreciacao,
d.seq seq_deliberacao, d.tipo tipo_deliberacao, p.ano ano_processo,
p.num num_processo, a.cod_tipo_decisao cod_tipo_decisao,
a.num_decisao num_decisao, a.ano_decisao ano_decisao,
a.cod_colegiado_decisao cod_colegiado_decisao, a.DATA DATA,
DECODE (a.cod_tipo_decisao,
NULL, ' ',
DECODE (a.cod_tipo_decisao,
08, 'RQ',
15, 'DC',
16, 'AC',
77, 'RL'
)
|| '-'
|| REPLACE (TO_CHAR (a.num_decisao, 'FMB9,999,999'), ',', '.')
|| '-'
|| REPLACE (TO_CHAR (a.num_ata, 'FMB9,999,999'), ',', '.')
|| '/'
|| TO_CHAR (a.ano_decisao, 'FM0009')
|| '-'
|| a.sigla_colegiado_decisao
) numdelib,
d.texto_identificacao item, a.descr_apreciador apreciador,
sf_tipo_del_descr (d.tipo)
|| ': '
|| TO_CLOB (sf_del_descr (d.cod_processo, d.cod_apreciacao, d.seq,
d.tipo)
) descr,
SUBSTR ( TO_CHAR (p.num, 'B999999')
|| TO_CHAR (p.ano, 'FM0009')
|| TO_CHAR (p.num_dv, 'FM9'),
2,
11
) processo,
a.cod_tipo cod_tipo_autor
FROM deliberacao_processo d, vw_aprec_proc_sem_ano_num_proc a, processo p
WHERE d.cod_processo = a.cod_processo
AND d.cod_apreciacao = a.cod
AND p.cod = a.cod_processo;DROP PUBLIC SYNONYM VW_ESC_DEL;
CREATE PUBLIC SYNONYM VW_ESC_DEL FOR TCU.VW_ESC_DEL;
GRANT SELECT ON TCU.VW_ESC_DEL TO R078S006;
GRANT SELECT ON TCU.VW_ESC_DEL TO R078S008;
GRANT SELECT ON TCU.VW_ESC_DEL TO R078S014;
GRANT SELECT ON TCU.VW_ESC_DEL TO R_GRANTSTEMPORARIOS;
GRANT SELECT ON TCU.VW_ESC_DEL TO WEBUSER_TEMP;
4 de março de 2010 às 9:13 pm #92964VitorLeandro
ParticipanteNossa, aí fica difícil mesmo. O que pode estar acontecendo é que o numero de ocorrencias com os valores novos da ultima tupla seja muito maior que das outras ocorrencias, fazendo com que o otimizador perceba que o FULL scan seja o caminho menos custoso.
Olha, join encima de view e view composta de views e mais views sempre não é uma boa estratégia.
Rode essa mesma consulta somente com o filtro da ultima linha.
SELECT COUNT ( * )
FROM tcu.vw_esc_del vw
WHERE (vw.cod_processo, vw.cod_apreciacao, vw.seq_deliberacao) in
( 564848 , 3141205 , 1)
Isso se realmente forem estes mesmo os valores novos.
Veja se continua fazendo o Full scan.
5 de março de 2010 às 4:45 pm #92975gsmdf
ParticipanteNão, sem full scan, e demora só uns 2 segundos para retornar o resultado.
Mas de fato essa é uma view sabidamente problemática e antiga..
Valeu pela ajuda!5 de março de 2010 às 5:03 pm #92976VitorLeandro
ParticipanteFica muito difícil ajudar, principalmente num cenário como este. Você pode tentar utilizar o Tunning Advisor. Pode ser que ajude!
5 de março de 2010 às 5:06 pm #92977gsmdf
ParticipanteDe fato, o cenário é bem complexo para uma ajuda a distãncia.
Mas agradeço por ter tentado ajudar! -
AutorPosts
- Você deve fazer login para responder a este tópico.