UJP - 技術情報

Life is fun and easy!

不正IP報告数

Okan Sensor
 
メイン
ログイン
ブログ カテゴリ一覧

     

コネクションプーリングについて考える

コネクションプーリングについて考える


0.改訂履歴

  • 2002.08.04 新規作成

1.はじめに

 このドキュメントでは,データベース接続に関するパフォーマンスアップの手法?である,コネクションプーリングの有効性について考えてみる.

 なお,対象としているRDBMSは,なんでもよい.

2.データベース接続について考えてみる

  • データベースとクライアントアプリケーションを,次のような関係にあるとする.

  • この時,Clientがデータベースに接続すると,次の図のようになる.

  • Clientの接続分だけ,DB Server上に,セッションを処理するプロセスやスレッドが起動する.
    • 具体的に言うと,Oracleではプロセス(専用サーバ時)が起動し,Sybaseではスレッドが起動する.

  • Clientからの接続が切れると,DB Server上にあるプロセス(スレッド)が終了する.
  • この「DBサーバ側でプロセス(スレッド)が起動する動作」というのが,DBサーバからすると結構なストレスになる.
  • 「セッションを確立する」という処理を大まかに考えると,次のような事を行っている.(順不同)
    • ネットワーク上の専用の空き番号を取得する.
    • プロセス(スレッド)等が起動するためのメモリを確保する.
    • プロセスを立ち上げるためのプログラムをロードする.
  • このように,メモリ,ネットワーク,I/Oに負担をかけてしまう事が分かる.
  • よって,この頻繁なプロセス(スレッド)の起動・終了を減らす事が出来れば,データベースサーバ上の動作オーバヘッドによるパフォーマンス改善が可能となる.

3.コネクションプーリングの原理

  • コネクションプーリングでは,接続時にコネクションを振り分けするアプリケーション層が存在する事になる.
  • これを図解すると,次のようなイメージとなる.

  • 実際にどのように稼働するかを示すと次の図のようになる.

  • このアプリケーション層(Application Server)が事前にコネクションを確保しておく.
  • よって,初期起動時にはDB Serverには負担がかかる.

  • Clientが接続してきた場合,このアプリケーション層で,空いているセッションに対して振り分けを行う.
  • よって,コネクションプーリングを使わない場合に比べ,接続の都度,DBサーバに負荷がかからなくなる.
  • この図で分かるとおり,動作の負荷がアプリケーション層に移っており,そこに負荷が集中化されるが,アプリケーション層は複数搭載する事が可能な層なので,システム全体として負荷分散を実現する事が出来る.

4.コネクションプーリングの実装について

  • コネクションプーリングは,特別な機能ではない.
  • 各自でアプリケーションサーバを開発する際には,たとえばOracle Objects for OLE 2.3以降やJDBC 2.0を用いればよい.
  • また,メジャーなアプリケーションサーバ,BEA WebLogicやWebSphererおよびODBC Administraotr等の管理画面を参照すると,プーリングに関する設定項目を確認する事が出来る.


広告スペース
Google