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


16

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

ここに画像の説明を入力してください

Logon_Timeによると、2012年7月31日または2012年8月1日からのセッション、または本日(2012年8月21日)より前のセッションがまだ生きているのはなぜですか?

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

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

ここに画像の説明を入力してください

Philのコメントに応えて追加:

ここに画像の説明を入力してください

Philの回答に応じて追加:

ここに画像の説明を入力してください


v$session.PREV_EXEC_STARTこれらのセッションの目的は何ですか?これらは接続プールの一部であり、頻繁に使用されているため、アイドル状態になっていないと思われます。
フィリ

私のものはOracle 10gなので、v $ sessionにはPREV_EXEC_START列がありません。しかし、Last_Call_ET列を含むクエリが再びあります(質問にその写真を追加しました)。
デルモンテ

開発者と話をしたところ、彼らは彼らのWebアプリでODP.NETを使用していると言っていました。したがって、これらのセッションが接続プールで生成されたことは確かです。OracleのステータスがINACTIVEであると完全に信頼することはできませんが、この場合は... 2週間前からセッションを強制終了できると思いますか?
デルモンテ

7
いいえ。INACTIVE単に、チェックしv$sessionた瞬間にSQLステートメントが実行されていないことを意味します。それらが接続プールの一部である場合、彼らは適切に仕事をしています-接続プーリングの全体的なポイントは、大量のログオン/ログオフの必要性を取り除き、高速起動のために永続的なセッションを維持することです1つのクエリを実行するだけです)。どうしてこれが心配なのか分かりません。
フィリ

@フィル-それを答えとして喜んで賛成です!
ジャスティン洞窟

回答:


22

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

INACTIVEv$session単にあなたがチェックし、正確な瞬間に実行されているSQL文が存在しないことを意味v$session

それらが接続プールの一部である場合、長時間ログインすることで適切に仕事をしています。接続プーリングの全体的なポイントは、大量のログオン/ログオフの必要性を取り除き、クエリの高速起動のために永続的なセッションを維持することです。

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

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サーバー管理者と話をして、接続プーリング構成の最下層にたどり着くことができます。


説明ありがとうございます。しかし、それらのodp.netセッションの値が増え続けているとしたらどうでしょうか。v $ resource_limit(元の質問で追加)を照会し、プロセスとセッションの値が値制限の80%に達していることを示します。それらのodp.netセッションはセッション値を消費し、701の制限値に達してからデータベース接続をドロップする可能性がありますか?(これらの制限値を1000または2000に拡張できることは知っていますが、それは問題の一部ではありません)
デルモンテ

次に、アプリケーションに問題があります。
フィリ

どうして?Webアプリケーションはodp.net接続を開いたり、閉じたり、破棄したりします...私が理解しているように、これらのodp.netセッションは、Webアプリケーションがそれらを破棄したとしても、将来の接続を待機しています。
デルモンテ

接続プールの構成の問題になるようです。時間の経過とともにv $ sessionのcount(*)をグラフ化しましたか?DBの診断パックライセンスはありますか?
フィリ

3
ISS(国際宇宙ステーション)ではなくIIS(MicrosoftのHTTP /アプリサーバー)を意味すると思います:
ジャスティンケイヴ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.