Tenho um banco Oracle em um linux,
estou usando pool de conexões do tomcat.
Toda conexão aberta está devidamente fechada depois de utilizada porem a conexão no oracle continua ativa,
alguem já passoupelo problema e sabe como resolver?
Você está fechando a conexão ou apenas fazendo release dela e devolvendo ao pool de conexões?
- Uai, se é um pool, então vai continuar aberta para ser reaproveitada. Ela deve ser fechada automaticamente depois de algum tempo.
- Quando você usa pooled connections, é aconselhável fechar todos os objetos que usam o objeto Connection, tais como Statement, ResultSet etc. Não é só fechar a Connection. Feche tudo (use um try {} finally {} se for o caso).
Olá
Suponho que sua aplicação faça tudo certinho e que mesmo assim suas estatísticas mostrem o problema. Já passei por problema semelhante e pergunto: como está mostrando estatísticas de sessão?
<editado>E mais, por favor diga como está usando o pool de conexões, se está usando as classes da Oracle (com cache e tudo o mais) e qual a versão do Oracle.
Um link que li pouco e não gostei de tudo o que li: Oracle 9iAS Best Practices in Performance and Scalability: Application Design and Configuration</editado>
[]s
Luca
Exatamente…tá tudo setado certinho…mas a conexão permanece sempre ativa…
Estou vendo as conexoes pelo toad
O select:
SELECT P.SPID,
S.LOCKWAIT,
CHR(39)||S.SID||','||S.SERIAL#||CHR(39) ID,
S.USERNAME,
OSUSER,
RTRIM(MODULE),
RTRIM(ACTION) IP,
PHYSICAL_READS PHY_READ,
ROUND(100*(CONSISTENT_GETS+BLOCK_GETS-PHYSICAL_READS)/
(CONSISTENT_GETS+BLOCK_GETS),2) HITRATIO,
S.LOGON_TIME,
MACHINE
FROM V$SESSION S,
V$SESS_IO SI,
V$PROCESS P
WHERE S.SID = SI.SID
AND
producao:usuario: S.PADDR = P.ADDR
AND (CONSISTENT_GETS+BLOCK_GETS) > 0
AND S.USERNAME IS NOT NULL
AND S.USERNAME <>'SYS'
AND STATUS='ACTIVE'
ORDER BY PHYSICAL_READS DESC
Ei Luca…como tu fez pra resolver?
A questão é o que você entende como sendo o problema
Você está reclamando porque usar o pool deixa conexões abertas logo após o código usá-las (2, 3 conexões) ou porque o número de conexões abertas supera o número sendo utilizado pelo pool?
Oracle 8.1.6.0.0
O pool de conexoes:
<Context path="/aplicacao" reloadable="true" docBase="C:\Desenvolvimento\aplicacao" workDir="C:\Desenvolvimento\aplicacao\work" >
<Resource name="jdbc/myoracle" auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:PRODUCAO"
username="teste" password="teste" maxActive="20" maxIdle="10"
maxWait="-1"/>
</Context>
Olá
Na verdade não resolvi. Foram tomadas algumas atitudes na direção de sanar o problema mas na verdade isto não aconteceu até o momento em que deixei o projeto. Este foi o motivo porque eu pedi para você descrever exatamente como acessou o pool e qual versão do Oracle. Veja o que editei depois de colocar a mensagem. :oops:
Não usou o cache da Oracle?
Aqui há alguns feras de Oracle como o Fábio Patricio ou o Boaglio. Um deles vai dar uma resposta tecnicamente melhor do que a minha que só coloquei mais dúvidas.
[]s
Luca
Desculpem o reenvio das mensagens…deu um problema aqui e nao aparecia como enviado
Nunca trabalhei com o Tomcat, mas pelo que pude entender do arquivo de configurações:
-
Você tem inicialmente 10 conexões com o Oracle abertas
-
O máximo de conexões são 20
Ou seja, se você atende 15 requests simultâneos, sua app vai abrir 15 conexões com o Oracle. Imagine que depois disso, sua app passe meia hora sem atender nenhum request. Depois de algum tempo, as conexões Oracle serão fechadas, até voltar ao número inicial de 10 conexões.
Esse número de conexões iniciais estará sempre aberto no Oracle.
Entendo que só vai cair para 0 conexões se você der shutdown no TomCat ou se houver algum recurso de parar o pool de conexões.
[]'s
Marco Campêlo
Só uma coisa…
As conexões ativas não são iguais ao maxIdle,de acordo com o que eu vou usando ela vai mantendo ativa…uma ,duas…quatas conexoes for abrindo…
Vou fazer um teste amanha pra ver por quanto tempo elas ficam ativas…
Obrigado a vcs pela ajuda…amanha posto aqui os resultados…
Talvez isso possa te ajudar a entender melhor o comportamento do Tomcat:
[]'s
Marco Campêlo
Valeu Marco,
eu já tinha lido o how to mas nao tinha prestado atenção em :
Random Connection Closed Exceptions
que é exatamente o problema…valeu!