- Este tópico contém 10 respostas, 3 vozes e foi atualizado pela última vez 17 anos, 11 meses atrás por punk_doido.
-
AutorPosts
-
28 de fevereiro de 2007 às 9:41 pm #78884punk_doidoParticipante
Ola galera… alguem pode me ajudar..
Já li alguma coisa sobre mas agora não encontro novamente.
Imaginando uma tabela qualquer em que uma aplicação qualquer faz repedidamente o mesmo select nessa tabela somente mudando o valor de algum campo que esteja na clausula where. O oracle gera o plano de execução na 1º vez e utiliza ele para as demais vezes, otimizando assim o desempenho. Mas se a aplicação mudar os valores dos campos de maneira “errada”, o Oracle acaba gerando o plano de execução toda santa vez, gerando assim uso de CPU desnecessário. Sobre esse assunto que eu queria entender melhor. Alguem pode explicar? Basicamente quero saber se é isso mesmo, como faco para verificar isso, se tem algum campo da session da aplicação que posso verificar isso….essas coisas.Obrigado.
28 de fevereiro de 2007 às 10:03 pm #78885Marcio68AlmeidaParticipanteSe você faz a seguinte consulta repetidamente :
Select * from tabela where codigo = '1'
O banco irá gerar um único parse, se o valor comparado for diferente, então ele fará um parse para cada consulta, nesse caso você deve usar o seguinte recurso :
Select * from tabela where codigo = :codigo
onde codigo é uma variável de ambiente…28 de fevereiro de 2007 às 10:45 pm #78888punk_doidoParticipanteEntendi. Mas na pratica, tenho um programa em Java que faz diversas execuções repetidas por horas, tem como olhando a conexão do aplicativo no banco descobrir quantos parse ele esta fazendo ?
Obrigado pela ajuda!
1 de março de 2007 às 1:04 am #78890chduarteParticipanteVoce consegue ver isso na v$sql. Primeiro descruba o sql_hash_value na v$session.
[]
1 de março de 2007 às 7:41 pm #78894punk_doidoParticipanteEstou fazendo uns testes aqui…. se eu rodar a seguinte query 10 vezes:
select nome from teste a1 where cod = :cod
Verificando na V$SQLAREA ele diz que faz o parte 10 vezes:
SQL_TEXT=select nome from teste a1 where cod = :cod
MODULE= T.O.A.D.
PARSE_CALLS=10Não era para ser somente 1 ? O que tem de errado ? Sendo que a variavel cod pode ter o mesmo valor as 10 vezes tanto valores diferentes que o resultado do parte é o mesmo.
Obrigado galera pela ajuda!!!
1 de março de 2007 às 8:35 pm #78895chduarteParticipanteVerifique o seu parametro cursor_sharing.
Altere ele para force na sessao e veja novamente.
SQL> alter session set cursor_sharing = force;
[]
1 de março de 2007 às 8:39 pm #78896punk_doidoParticipanteObrigado pela ajuda!
Não funcionou, continuou na mesma. Tem mais alguma ideia ?
Valeu…..
1 de março de 2007 às 9:25 pm #78897chduarteParticipanteVerifique se voce nao esta confundindo o parse de uma query, que é a verificacao se a query é valida com o hard parse, que é o mais custoso:
SELECT pa.sid, pa.value “Hard Parses”, ex.value “Execute Count”
FROM v$sesstat pa, v$sesstat ex
WHERE pa.sid=ex.sid
AND pa.statistic#=(select statistic#
FROM v$statname where name=’parse count (hard)’)
AND ex.statistic#=(select statistic#
FROM v$statname where name=’execute count’)
AND pa.value>0
and pa.sid =
;[]
2 de março de 2007 às 1:45 am #78900punk_doidoParticipanteRealmente deu uma puta diferença agora. Nos testes que eu fiz essa coluna
v$sesstat.pa é bem diferente da V$SQLAREA.PARSE_CALLS.O que significa essa que estava usando entao ?
Então relacionado com esse assunto só preciso me preocupar com a v$sesstat.pa para ter certeza de que algum sistema não está executando sempre a mesma query e o banco está sempre fazendo parse nela ?
Obrigadão!!!
2 de março de 2007 às 3:58 pm #78901chduarteParticipanteResumindo a missa é:
Hard Parse: É feito quando a sua query ou plano de execucao ou metadata nao estao na shared_pool.
Soft Parse: É feito quando a sua query ou plano de execucao ou metadata nao estao shared_pool.
Fatores como plano de execucao e as binds podem alterar o tipo de parse que sera realizado mas é um assunto um pouco complexo.
Este link: http://download-east.oracle.com/docs/cd … .htm#45403 te da mais infos.
[]
2 de março de 2007 às 4:10 pm #78902punk_doidoParticipanteObrigado Carlos pela ajuda, vou estudar mais a fundo e depois conto as novidades!!!
-
AutorPosts
- Você deve fazer login para responder a este tópico.