0

.NET Webアプリは接続にODP.NETを使用し、データベースに接続するためのOracleユーザーは「webuserOracle」です。そのWebアプリは常に接続を閉じ、接続を破棄します。

ただし、Oracle 10gデータベースでは、Oracleユーザー「webuserOracle」のセッションとプロセスの値は、閉じたり停止したりしないため、常に高いことがわかります。

接続時間を最大5分に制限するために、「webuserOracle」のOracleプロファイルを設定することにしました。

CREATE PROFILE profile_webuserOracle LIMIT CONNECT_TIME 5;

ALTER USER webuserOracle PROFILE profile_webuserOracle;

質問:

Webアプリの場合、接続を5分に制限すると、ユーザーはWebアプリを2時間操作できるようになります。5分の制限は、データベースに接続するためにトリガーされたイベント(ボタンのクリックなど)のみです。Con.OpenとCon.Disposeの間で発生したすべてのことについて5分:

Dim con As OracleConnection = oraConexion()
con.Open()
''' There'll be a limit of 5 minutes to run the code here
con.Close()
con.Dispose()
4

1 に答える 1

1

Webアプリケーションのプロファイルにを設定するCONNECT_TIMEことは、非常に悪い考えである可能性があります。

まず、一般的に、3層アプリケーションは中間層の接続プールを利用します。つまり、中間層サーバーはデータベースへの接続プールを開き、長期間開いたままにして、必要に応じてWebセッションに渡されます。つまり、サイトをクリックしている1人のWebユーザーは、クリックするたびに異なるデータベースセッションを取得する可能性が高く、1つのデータベースセッションが非常に多くのWebユーザーによって使用されることになります。

CONNECT_TIME接続プール接続にを設定した場合、

  • 中間層は、接続プールから取得した特定の接続が許可された接続時間を超えたというエラーを常に受け​​取る可能性があります。select 1 from dualプールから取得するすべての接続で中間層にダミークエリ(つまり)を実行させて、対話が開始する前に5分が経過していないことを確認することで、その一部を軽減できますが、タイムアウトが発生する保証はありません。ページで最初のクエリを実行しても到達しません。
  • 中間層は、データベースへの新しい物理接続を常に開いて(かなり高価なプロセス)、5分間開いていたために閉じられた接続を置き換えます。これらの接続ストームは、データベースにかなりの負荷をかける可能性があります。また、ユーザーはプールからの接続を再利用するのではなく、新しい物理接続が開かれるのを常に待機しているため、アプリケーションのパフォーマンスの問題も発生します。
  • この変更を行うと、セッションとプロセスの数がはるかに多くなる可能性があります。中間層は、ユーザーにサービスを提供するために必要な実際の物理接続の数に加えて、次の発信者に期限切れであることを通知するためだけに残しておく必要のある期限切れの接続の数を維持します。

あなたが解決しようとしている本当の問題は何ですか?中間層が閉じないデータベース接続のプールを維持することは完全に正常です。それは完全に正常で健康的です。一度に開いている接続の数を減らしたい場合は、中間層サーバーの接続プール設定を調整できます。

于 2012-08-13T18:08:09.190 に答える