Por que as sessões do Oracle ainda estão ativas após duas semanas inativas

16

DB: Oracle 10g

O / S: Windows Server 2003 de 64 bits

Consulto a lista de sessões do Oracle geradas por aplicativos da web (filtro por programa = w3wp.exe)

select * from V$session
where UPPER(program) LIKE '%W3%'
order by logon_time

insira a descrição da imagem aqui

De acordo com o Logon_Time, por que as sessões ainda estão ativas de 31/07/2012 ou 01/08/2012 ou qualquer sessão antes de hoje (21/08/2012)?

Eu configurei no sqlnet.ora: SQLNET.EXPIRE_TIME = 20 Portanto, isso significa que a cada 20 minutos o Oracle está verificando se as conexões ainda estão ativas.

Todos os esquemas de usuário têm perfil padrão. Isso significaria que nenhuma sessão nunca expiraria ou morreria?

insira a descrição da imagem aqui

Adicionado em resposta ao comentário de Phil:

insira a descrição da imagem aqui

Adicionado em resposta à resposta de Phil:

insira a descrição da imagem aqui

Delmonte
fonte
O que é v$session.PREV_EXEC_STARTessas sessões? Eu suspeito que eles fazem parte de um conjunto de conexões e, portanto, não foram desativados porque estão sendo usados ​​com frequência.
Philᵀᴹ
O meu é o Oracle 10g, portanto, não há coluna PREV_EXEC_START na sessão v $. Mas eu tenho uma consulta novamente, incluindo a coluna Last_Call_ET (eu adicionei essa foto na minha pergunta).
Delmonte
Conversei com nossos desenvolvedores e eles me disseram que estão usando o ODP.NET em seus aplicativos da web. Portanto, é certo que essas sessões foram geradas em um conjunto de conexões. Não confio completamente quando o Oracle mostra o status INATIVO, mas neste caso ... Você acha que eu poderia matar sessões de duas semanas atrás?
Delmonte
7
Não. INACTIVESignifica apenas que não há uma instrução SQL sendo executada no momento exato em que você verifica v$session. Se eles fazem parte de um pool de conexões, eles estão fazendo seu trabalho corretamente - o objetivo principal do pool de conexões é remover a necessidade de muitos logons / logoffs e manter sessões persistentes para uma inicialização rápida (login aéreo muito maior novamente e novamente apenas para executar uma consulta). Não entendo por que você está preocupado com isso.
Philᵀᴹ
@ Phil - eu seria feliz em votar isso como resposta!
Justin Caverna

Respostas:

22

Eu suspeito que eles fazem parte de um conjunto de conexões e, portanto, não foram desativados porque estão sendo usados ​​com frequência.

INACTIVEem v$sessionapenas significa que não há uma instrução SQL que está sendo executada no momento exato que você verifique v$session.

Se eles fazem parte de um conjunto de conexões, eles estão realizando seu trabalho corretamente fazendo logon por longos períodos de tempo. O objetivo principal do pool de conexões é remover a necessidade de muitos logons / logoffs e manter sessões persistentes para a inicialização rápida de consultas - há uma sobrecarga muito maior para executar uma consulta e desconectar sempre.

Para obter o último tempo de atividade para cada sessão:

select username, UPPER(program), logon_time, 
       floor(last_call_et / 60) "Minutes since active", status
from v$session
where UPPER(program) LIKE '%W3%'
order by last_call_et;

Eu aconselho a não matar sessões, a menos que você saiba que isso não causará problemas no lado do aplicativo (tentando usar uma sessão que foi encerrada, por exemplo).

Pode ser que você esteja vendo um pool de conexões configurado incorretamente que cria centenas de conexões assim que o aplicativo é iniciado - o pool de conexões pode ser uma ordem de magnitude maior do que precisa. Sugiro entrar em contato com a equipe de suporte a desenvolvedores / aplicativos e ver como o pool de conexões está configurado.

Depois de pesquisar um pouco, o w3wp.exe é o processo do pool de aplicativos do IIS - você quase certamente deseja conversar com os administradores do servidor da Web do IIS para ajudar a chegar à parte inferior da configuração do pool de conexões.

Philᵀᴹ
fonte
Obrigado pela sua explicação, mas e se os valores das sessões odp.net estiverem crescendo e crescendo em números? Consultei v $ resource_limit (adicionado à minha pergunta original) e mostra que os valores de processos e sessões estão atingindo 80% do limite de valor. Essas sessões do odp.net podem estar consumindo os valores das minhas sessões, atingir o valor limite 701 e depois largar minha conexão com o banco de dados? (Eu sei que eu poderia estender esses valores-limite até 1000 ou 2000, mas não é parte da pergunta)
Delmonte
Então você tem um problema de aplicativo.
Philᵀᴹ
Por quê? Os aplicativos da Web estão abrindo, fechando e descartando a conexão odp.net ... Pelo que entendi, essas sessões do odp.net ainda estão vivas aguardando conexões futuras, mesmo que o aplicativo da Web as disponha.
Delmonte
Parece que será um problema de configuração do conjunto de conexões. Você representou graficamente uma contagem (*) de v $ sessão ao longo do tempo? Você tem uma licença do pacote de diagnóstico para o banco de dados?
Philᵀᴹ
3
Presumo que significava IIS (servidor HTTP / app da Microsoft), não ISS (Estação Espacial Internacional) :-)
Justin Caverna