• 締切済み

コネクションプーリングの確認方法について

JDBCを使用してOracleへアクセスするWeb画面があります。 コネクションプーリングに対応しているとのことなので、実際に有効になっているのか確認したいのですが、次の方法で正しいのでしょうか。 (1)SQL文が実行されるWeb画面の処理を動作させた時に、OracleのV$SESSIONで、存在する「セッション識別子+シリアル番号」を確認する。 (2)この処理を何回実行しても、V$SESSIONに同じ「セッション識別子+シリアル番号」の行が存在したままになるのか確認する。 もし、Web画面の処理を実行させる度に、新しい「セッション識別子+シリアル番号」の行が増えていく場合は、コネクションプーリングが有効になっていないと考えてもいいのでしょうか。 現状は、コネクション上限数の設定に関係なく、V$SESSIONに新しい行がどんどん発生し、古い行はあるタイミングでごっそり消えるという状態です。これはコネクションプーリングされている状態なのか、コネクションプーリングされていない状態なのか、それともコネクションプーリングとは全く関係ないのか知りたいです。 (なお、アイドルタイムアウトの設定は十分長く、タイムアウトは発生しない(はず?)のタイミングでWeb画面を操作しています。)

  • Oracle
  • 回答数1
  • ありがとう数0

みんなの回答

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

このあたりを参考に コネクションプーリングとV$SESSIONの数とは関連性がないと思うけど。

参考URL:
http://www.oracle.com/technetwork/jp/articles/chapter5-1-101584-ja.html
nittoyoo
質問者

補足

回答ありがとうございます。 紹介いただいたページは、コネクションプーリングについて分かりやすく解説してあり、大変参考になります。 今回の質問は、参考ページの図9の物理接続の状態を知るためには、DBサーバー側でV$SESSIONを確認するのが正しいのか、という内容です。 また、質問には記述していませんが、あわよくば図20の振る舞いも確認できるかも、と期待しています。 コネクションプーリングが有効であれば、SQL文を発行する度に物理接続の接続/切断を繰り返すはずはありません。 Web画面を動かしたところ、V$SESSIONの情報が質問に記述した状態になったため、コネクションプーリングが有効になっていないかも? と疑念を持ち、質問した次第です。

関連するQ&A

  • コネクションプーリングの枯渇

    tomcat-Servletでの開発を行っています。 MVCモデルでのWEBアプリケーションです。 DBへの接続用として自作のコネクションプーリングを使用しています。 (プーリング数は20を設定) 基本的なSQL実行フローは下記のようになります。 1.コネクションプーリングを取得 2.SQL文を実行 3.コネクションプーリングを返却 ところが、時間を置いて psコマンドで確認すると、 だんだん数が減っていっているようです。 原因を調査しているのですが、 もし次のような原因で正しいかどうか分かりましたらご連絡ください。 <考えている原因> 要するに上記の3(返却)がされていないのであって。 ・実行処理中に利用者がクライアント側のブラウザを落としている。 と仮説を立てているのですが。 この仮説が正しいかどうか、 また、もし正しい場合には、どうすれば回避可能かをご教授ください。 補足の必要があればご連絡ください。 (コネクションプーリングの全文を載せたいのですが、  長すぎるようで・・・)

    • ベストアンサー
    • Java
  • WebクライアントでDBセッションを維持させたい

    C/S系システムをWebシステムに移行することを考えてます。 Webクライアントにおいて、アプリでログイン後にDBセッションをずっと保持させたままにしておきたいのです。(WebクライアントとDBセッションを1対1にしたい) APサーバ上でコネクションプーリングしてDBとのセッションを維持させておくことは知ってます。 実現方法や、実現された事例等がありましたら教えて頂けないでしょうか? DBはORACLEを利用してますが、 Webクライアントと dbms_session.unique_session_id を一意に定めたいのです。

  • SQL実行時の負荷、処理時間確認

    oracle 10g Release 10.2.0.2.0を使用しています。 SQLにてDELETE文実行時のサーバ負荷、処理時間を確認したく、 次のSQLを実行しましたが、「V$SQLが無い」と怒られました。 SELECT * FROM V$SQL; oracleのバージョンを確認するSQL(select * from v$version;)は 問題なく実行できます。 V$SQLが使用できない理由、もしくは別の方法で処理負荷、処理時間を 確認できる方法とうあれば教えていただきたいです。 宜しくお願いします。

  • コネクションプールについて

    コネクションプール有とコネクションプール無でDB接続・切断を繰り返したときに どれくらい差があるか試してみようと思いWebアプリ上(フレームワークにStruts2を使用)で 下記コードを実行してみました。 dbcpConnectメソッド(コネクションプール有) と jdbcConnectメソッド(コネクションプール無) をそれぞれ千回づつループで回して実行してみました。 結果は 【コネクションプール有】実行にかかった時間:157384 ミリ秒 【コネクションプール無】実行にかかった時間:158760 ミリ秒 で大差はありませんでした。 コネクションプールを使用するともう少し早いと思っていたのですがそのようなことはないのでしょうか。 public String test4() { // コネクションプール有の接続 long start = System.currentTimeMillis(); for(int i=0; i< 1000; i++) { dbcpConnect(); } long stop = System.currentTimeMillis(); System.out.println("実行にかかった時間は " + (stop - start) + " ミリ秒です。"); // コネクションプール無の接続 start = System.currentTimeMillis(); for(int i=0; i< 1000; i++) { jdbcConnect(); } stop = System.currentTimeMillis(); System.out.println("実行にかかった時間は " + (stop - start) + " ミリ秒です。"); return "jstl4"; } public void dbcpConnect() { Connection con = null; try{ Context context = new InitialContext(); //DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/library"); DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/dhcpTest"); con = ds.getConnection(); Statement stmt = con.createStatement(); String sql = "SELECT * FROM test.test"; ResultSet rs = stmt.executeQuery(sql); } catch(Exception e) { System.out.println("Error"); } finally { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } public void jdbcConnect() { Connection con = null; try{ con = DriverManager.getConnection("jdbc:mysql://localhost", "root", "root"); Statement stmt = con.createStatement(); String sql = "SELECT * FROM test.test"; ResultSet rs = stmt.executeQuery(sql); } catch(Exception e) { System.out.println("Error"); } finally { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • oracel11gのセッション削除できない

    oracle11gにおいて、v$sessionで調べたsid、serial#でALTER SYSTEM KILL SESSIONを実行すると、ORA-00030のエラーになりました。そこで、v$processからspidを調べてOS(linux)上からkillしようとしたのですが、OS上に該当のプロセスが存在しませんでした。こういう場合はoracleの再起動しか対処方としてはないのでしょうか?できれば再起動なく対処できればと考えているのですが。

  • コネクションプーリングについて

    WebアプリケーションとRDBMSの接続時間の軽減として、 コネクションプーリングという手段があるそうです。 ただ、実装に手間がかかるそうです。 アプリケーションサーバーはこれを実装しているようですが、 そんな予算はありません。 そこで、この部分をやってくれるオススメなソフトなぞはあるでしょうか? ちょっと調べたところ「jdbshare」、「PoolMan」などがありましたが。 もしかして、Tomcat自体にコネクションプーリングの機能があるのでしょうか? なにぶん勉強不足で申し訳ありませんが、よろしくお願いします。

    • ベストアンサー
    • Java
  • データベースを使用したWebアプリの作り方

    php+Mysqlで簡単な照会プログラムを作ろうと思っているのですが、Webを使ったアプリを作ったことが無いので要領が判らず困っています。 phpの文法やMysqlの操作などはマニュアルを見ればなんとかなると思うのですが、幾つかのフォームを介した場合のセッションの考え方(Web自体のセッションとMysqlに対してのコネクション)がよく判りません。 ログイン画面でユーザーの認証をしたとすると、次のフォームに移ったとき、同じセッションであることを保持する情報をCookieなりデータベースなりに吐き出して処理するんであろうと思うのですが、その時にデータベースのコネクション情報は保持する(できる?)のでしょうか? mysql_pconnectとmysql_connectがあるようですが、mysql_pconnectを使った実践的なアプリケーションの例が見つからないので、立ち止まっています。 初歩的な質問で申し訳ないですが、参考になるサイトを教えて頂けるだけでも結構ですので、よろしくお願いします。

    • 締切済み
    • PHP
  • Sessionがnullになりません。

    下記の環境でWebアプリケーションを開発しています。 java 1.5 eclipse 3.3 tomcat 5.5 ある画面Aは検索ボタンを押して結果一覧を表示したり、 結果一覧の詳細を知るためにリンクを押して、ポップアップ画面Bを表示したりします。 web.xmlに <session-timeout>10</session-timeout> と記述し、10分でタイムアウトとしています。 Servlet処理の最初で request.getSession(false) によりセッションを取得し、nullであればタイムアウト画面に遷移させています。 結果一覧を表示した後、10分間何もせずに画面Bを表示しようとすると ポップアップの画面はタイムアウト画面で表示されます。 Servletにブレークポイントをつけて確認したところ このときのrequest.getSession(false)の結果はnullでした。 タイムアウト画面を×ボタンで閉じ、A画面内で検索ボタンを押したところ、 request.getSession(false)の結果はnullではありませんでした。 ただし、session内にsetAttributeしていたBeanが全てnullになっており、 その後の処理で例外が発生してしまいました。 なぜ検索ボタンを押したところで sessionがnullになっていないのでしょうか?

    • ベストアンサー
    • Java
  • VBscriptの動きを1行1行確認する方法

    会社に○○○.vbsというプログラムがあるのですが、その流れを勉強しようと思っています。 自分はExcelでEVAは作成したことがあるのですが、その時はマクロを実行しながら 1行1行何の値が入っているか確認しながら操作できました。(F5を押すと処理が1行進む感じです) そしてイミディエイトで値などもすぐに確認できました。 VBscriptでも同じようなことが可能でしょうか? VBAに貼り付けたのですが、うまく動きませんでした。

  • あるタイミングでoracleの処理が遅くなることについて。

    質問です。 oracleにアクセスするWebシステムで、ある程度負荷をかけると処理が極端に遅くなります。 OS : Miracle Linux2.0 WebServer : Tomcat4.1.24 Oracle : 9.0.1 実際に行っている処理は、DBからデータを取得するだけです。データの量としても多くはなく、100件程度です。 コネクションプールを用いており、データソースからコネクションを取得し、ResultSetから結果を取得しています。 ResultSetからのデータ取得は、下記のようにwhile文でループさせています。ちなみに、next()を実行させているだけで、その他のことは何もしていません。 while( resultset.next()){ } 上記のような処理に対し、ボタンを20回ほど連打すると、処理が極端に遅くなってしまいます。処理の計測は、while文の前と後にcurrentTimeMillis()を設け計測しました。 1アクセスのみの時間は0.2sほどですが、連打をすると20sと遅さになります。 また、while文の最後にSystem.out.print()にて処理の終わりを確認しようと思ったのですが、処理が遅くなった途端、終わりまで到達せずに止まったような感じになり、20sほど経過してから、アクセスした分の処理が一気に終わるのです。 テーブルのロックか、もしくは、パフォーマンスの問題でしょうか?曖昧な説明で申し訳ありませんが、些細なことでもよろしいので、どなたかご教授願いますでしょうか。 よろしくお願いいたします。