web-dev-qa-db-ja.com

Oracleセッションが2週間非アクティブになった後もまだ生きている理由

DB:Oracle 10g

O/S:Windows Server 2003 64ビット

Webアプリケーションによって生成されたOracleセッションのリストをクエリします(program = w3wp.exeでフィルター)

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

enter image description here

Logon_Timeによると、なぜ31/07/2012または01/08/2012からのまだアクティブなセッション、または今日(21/08/2012)より前のセッションがあるのですか?

Sqlnet.oraで構成しました:SQLNET.EXPIRE_TIME = 20したがって、20分ごとにOracleは接続がまだアクティブであるかどうかをチェックしています。

すべてのユーザースキーマにはデフォルトのプロファイルがあります。それは、セッションが決して期限切れになったり、死んだりしないことを意味しますか?

enter image description here

フィルのコメントに応じて追加:

enter image description here

フィルの回答に応じて追加:

enter image description here

16
Delmonte

それらは接続プールの一部であり、頻繁に使用されているためアイドル状態になっていないと思います。

INACTIVE in v$sessionは、チェックした瞬間にSQLステートメントが実行されていないことを意味しますv$session

それらが接続プールの一部である場合、長期間ログインすることで適切に仕事をしていることになります。接続プーリングの全体のポイントは、多数のログオン/ログオフの必要性をなくし、クエリを高速に起動するために永続的なセッションを維持することです。1つのクエリを実行するためにログインするたびに、はるかに大きなオーバーヘッドがログインしてから切断されます。

各セッションの最後のアクティビティ時間を取得するには:

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;

アプリケーション側で問題が発生しないことがわかっている場合(たとえば、強制終了されたセッションを使用しようとした場合)を除いて、セッションを強制終了しないことをお勧めします。

アプリが起動すると数百の接続を作成する、正しく構成されていない接続プールを見ている場合があります-接続プールは必要以上に大きいかもしれません。開発者/アプリケーションサポートスタッフに連絡し、接続プールの構成方法を確認することをお勧めします。

少し調査を行った後、w3wp.exeはIISアプリケーションプールプロセスです。ほとんどの場合、IIS Webサーバー管理者に連絡して、接続プール構成の下部。

22
Philᵀᴹ