- This topic has 2 replies, 2 voices, and was last updated 3 years, 6 months ago by José Laurindo Chiappa.
-
AuthorPosts
-
22 de abril de 2021 at 4:56 pm #147670CLAUDENIL DIAS PRADOParticipant
Pessoal estou com seguinte caso, no meu banco qdo rodo por exemplo o script abaixo, acontece uma enorme DEMORA e não consigo rodar outros selects até o script abaixo seja finalizado, não sei se tem ligação mas isso aconteceu depois que apliquei um REBUILD no banco e rodei as seguintes analises de estatiticas:execute dbms_stats.gather_system_stats(), essa exec dbms_stats.GATHER_FIXED_OBJETCTS_STATS() e esta EXECUTE DBMS_UTILITY.ANALYZE_SCHEMA(‘SO’,’COMPUTE’);
================SCRIPT============================
select * from LANC
where codigo=’1′ and STATUS=’0′
AND DATAEMITIDO BETWEEN ’01/01/2019′ AND ’30/04/2021′
============================================
Um detalhe rodo o script acima via SQL DEVELOPER (demorando 200 segundos), e como disse qdo tento rodar outro select o mesmo não é executado ate que o script acima seja devidamente finalizado.
23 de abril de 2021 at 8:33 am #147674CLAUDENIL DIAS PRADOParticipantPessoal um detalhe, quando rodo o comando:
EXEC DBMS_STATS.GATHER_TABLE_STATS(‘RM’, ‘FLAN’, cascade=>true);A cosnulta cai de 200 segundos para menos de 3 segundos, mas depois o problema volta aconteceer na mesma tabela e tenho que novamente rodar o DBMS_STATS na tabela aqui citada.
Obrigado
23 de abril de 2021 at 1:37 pm #147677José Laurindo ChiappaModeratorBlz ? Então, primeira coisa no SQL DEVELOPER o default é uma sessão COMPARTILHADA, onde vc só pode executar um novo comando após o comando em execução terminar : vc tentou executar o tal SQL numa sessão DEDICADA, com Shift-N , ou executar via sqlplus ?
Segunda coisa, vc SABE o que está fazendo quando sai coletando as mais diferentes esatísticas ? Por exemplo, GATHER_FIXED_OBJECT_STATS serve para coletar estatísticas de objetos INTERNOS do database , então se esse objeto LANC ** não é ** um objeto interno/parte do dicionário de dados, vc Não Obtém Coisa alguma de bom com isso…
Minha recomendação final então é : obtenha o plano de Execução REAL EXTENDIDO cfrme https://blogs.oracle.com/optimizer/how-to-generate-a-useful-sql-execution-plan mostra : as colunas A-ROWS e E-ROWS servem pra te mostrar se a qtdade Estimada de linhas a processar está Equivalente à qtdade real vinda da execução….Finalmente : o conceito de estatísticas de CBO é que elas servem, entre outras coisas, para Indicar volumes de dados, qtdade de linhas, índices que podem ser usados, etc : em princípio, ENQUANTO não houverem DMLs inserindo/atualizando/removendo dados, o Plano de Execução não deveria mudar.. Quando vc diz que “pouco tempo depois” o tempo de execução ‘volta a ficar ruim’ plz nos conte : HOUVERAM ou NÂO DMLs na tal tabela LANC ?? E O PRINCIPAL DE TUDO : qual plano de execução vc obtém na execução ‘rápida’ e na execução ‘lenta’ ???
[]s
Chiappa
-
AuthorPosts
- You must be logged in to reply to this topic.