コラム

アプリケーションサーバの効率を高める「JBoss EAP7 Database Connection Pool」とは

筆者:大西 俊維

クラウド
ミドルウェア
サーバ
データベース
プログラミング
Web
ソフトウェア

2016.12.07


押さえておきたいアプリケーションサーバのコネクションプール機能とその設定方法! 今回のコラムでは、アプリケーションサーバ おいて必須となる「 DataBase Connection Pool 」の設定について JBoss EAP 7 をベースに紹介してみたいと思います。


コネクションプールの設定を紹介する前に


今回は、アプリケーションサーバにおいて、データベースへのアクセス効率を高めるための機能、「コネクションプール」 についてご紹介をしたいと思います。アプリケーションサーバについて詳しく知りたい方は、下記のコラムをご覧ください。

JavaEEアプリケーションサーバをちょっと語るコラム

コネクションプールについてご紹介をする前に、アプリケーションサーバとデータベースの関係を見てみたいと思います。
通常 Webアプリケーションではユーザ情報の保存にデータベースが用いられます。大半のWebアプリケーションでは RDBMS が使用されています。最近では NoSQL データベースも増えてきましたが...。

通常ユーザのWebアクセスに対してデータベースの情報を使用する場合、アプリケーションサーバとデータベース間では以下のようなやり取りが行われます。

   1. ネットワークコネクションの確立
   2. 接続ユーザの認証
   3. データベースコネクションの確立

   4. SQLクエリの発行
   5. SQLクエリの処理
   6. SQLクエリの結果送信
   7. データベースコネクションの切断
   8. ネットワークコネクションの切断

この様にWebアクセスでデータベースにおける接続には様々な手順が必要です。
アクセス毎にこの手順を繰り返すのは非常に効率が悪いと言えます。1度のアクセスで、サーバの性能にもよりますが数十ミリ秒~数百ミリ秒 の処理時間が必要となります。Webアプリケーション では同時に数百人が処理を行う必要があり、数ミリ秒の時間であってもレスポンスタイムに大きな影響を与えます。

DB処理に必要な時間は次のように考えることができます。
データベースアクセス時間(数十ミリ秒~数百ミリ秒)×同時アクセス数=DB処理に必要な時間
…大きなタイムロスになることがわかりますね。

コネクションプール機能を使用する事で、1~3 7~8 の手順を省略 することができ、データベース接続の効率が向上します。
データベースのアクセス効率が向上することで、Webアクセスの応答性も向上します。

WebアプリケーションサーバとRDBMSで行われるやりとり

コネクションプールとは?


コネクションプール機能 は、アプリケーションサーバに搭載されている機能で、データベースへのコネクションをプーリング(備蓄、貸出) してデータベースへのアクセス効率を高める機能 です。

コネクションプール機能 は予め、データベースとのコネクションを作成してアプリケーションへ貸し出します。また、アプリケーションは、データベース処理を終えるとコネクションをプールに返却しますがコネクションは切断されません。このため、Webアクセス毎にデータベースコネクションを準備する必要がなくなり、データベースアクセスの効率を向上する事が出来ます。

コネクションプールを構成する要素は、JDBCドライバJNDIサービスコネクションプール、コネクションプールを利用するアプリケーション です。

  • JDBCドライバ
    • DBに接続するためのライブラリ、DBメーカ等が提供します。
       
  • JNDIサービス
    • コネクションプールのを登録して、アプリケーションにコネクションプールへの接続オブジェクトを提供します。
       
  • コネクションプール
    • DBへのコネクションを管理するサービス
       
  • コネクションプールを使用するアプリケーション
    • Java Persistence API(JPA
    • JDBC でプログラムしたアプリケーションコンポーネント
    • その他フレームワークのコンポーネント等

 

JBoss EAP 7 でのコネクションプール設定


JBoss EAP 7 での コネクションプール設定 の流れは以下の手順です。

  1.JDBC ドライバの登録
  2.コネクションプールの作成

コネクションプールの設定はWebコンソール、またはCLI を使用して設定することができます。

コネクションプールの設定 ①.JDBC ドライバの登録方法


JBoss EAP 7 への JDBC ドライバの登録方法 は 2種類 あります。

  • JDBC ドライバの jar ファイルを Deploy (配備) して登録する。
  • JDBC ドライバの jar ファイル Module として登録する。


JDBCドライバの jar ファイルを Deploy(配備) して登録する方法
方法は単純で、JDBCドライバを WebApplication(~.war) と同様に Deploy(配備) するだけです。

例 CLIの場合(StandaloneモードでのDeploy MySQLサーバの場合)

    [standalone@localhost:9990 /] deploy mysql-connector-java.jar
  ※ mysql-connector-java.jar はMySQLのサイトからダウンロードした JDBCドライバ

JDBCドライバの jar ファイルを Module として登録する方法
Module として登録する場合は所定のディレクトリへの jar ファイル配置と module.xml ファイルの準備、DataSource SubSystem へのドライバ登録が必要です。

例 CLIの場合(StandaloneモードでのDeploy MySQLサーバの場合)

    [disconnected /] module add --name=com.mysql --resources=./mysql-connector-java.jar --dependencies=javax,api,javax.transaction.api
    [disconnected  /] connect
    [standalone@localhost:9990 /] /subsystem=datasources/jdbc-driver=mysqldb:add(driver-name=mysql,driver-module-name=com.mysql)

ドライバの登録 は、2種類の方法 がありますが、それぞれ一長一短です。
 jar ファイルとして deploy する方法 は単純ですが、ドメイン構成では使用するサーバグループに対して deploy が必要 になります。不用意に undeploy するとコネクションプールが機能しなくなります。
module として登録する場合、ドメイン構成ではすべてのホストマシンに対して module の登録が必要 になり手間が増えます。しかし、モジュールとして登録することで いつでも利用することが可能 です。

コネクションプールの設定 ② コネクションプールの作成


次に登録したJDBCドライバを基に、コネクションプールを作成します。

コネクションプールの作成 Webコンソール または、CLI を使って作成する事が出来ます。コネクションプールを作成する際には、2つの種類があります Non-XA XA です。

XA タイプのコネクションプールでは、X/Open XA規格にに基づいた分散トランザクション処理が可能です。分散トランザクション処理を行う場合は XA に対応するデータベース、ドライバ、アプリケーションが必要になります。Non-XA は分散トランザクショを行わないローカルトランザクションのコネクションプールです。
今回の設定では Non-XA タイプでの接続方法例をベースに紹介 しています。

■ web コンソールの場合

ウィザードベースなので、選択に従い、必要な情報を入力するだけです。以下の画像はWebコンソールのウィザードです。

CLI の場合Standaloneモード で、module 登録、MySQLサーバの場合 )

[standalone@localhost:9990 /] data-source add --name=mysqlDS --jndi-name=java:jboss/datasources/MysqlDS --driver-name=mysql --connection-url=jdbc:mysq://localhost:3306/mydb --user-name=dbusername --password=dbpasswd 

※ その他必要に応じてオプションの設定が可能

コネクションプールのオプション


コネクションプールの設定には様々なオプションがあります。オプションを設定する事で、より効率的なデータベース接続を提供する事ができます。

主要なコネクションプールのオプション

  • jndi-name : DataSource のJNDI サービス登録名、アプリケーション側と名前を合わせる必要がある
  • driver-name : JDBCドライバの登録名、jar デプロイの場合はデプロイされたファイル名
  • connection-url : jdbc:xxxx:xxx  から始まる接続アドレス、DBメーカにより異なる
  • check-valid-connection-sql : コネクション貸出時に、テストクエリを発行してコネクションのチェックを行う。失敗した場合はそのコネクションは貸し出されない。
  • max-pool-size : コネクションが作成される最大プールサイズ、最大プールを超える貸出は空きコネクションが出るまでアプリケーションは待機する。(タイムアウトまで)
  • min-pool-size : プールが使用されていない場合の最低維持数。最低使用すうを超えるしばらく使われていないコネクションはクローズされる。

この他にも、30を超えるオプションがあります。

まとめ


以上、JBoss EAP 7 でのコネクションプール設定をご紹介しました。 
コネクションプールの設定方法をマスターすれば、アプリケーションサーバをより効果的に活用できます。ぜひ、参考にしてみてください。
JBoss 7 のインストールやその様々な設定については、Red Hat 社の提供する JBoss Administration コースを、ぜひ受講してみてください。

JBoss Application Administration I (JB248v7)
 

関連URL

筆者紹介

大西 俊維

プロフィール

大西 俊維(Toshiyuki Oonishi)

Java、Linux、ミドルウェア等のコースを担当しています。
主に開発よりの技術が得意分野で、覚える、考える前に一度やってみようを担当コースでは意識しています。
「百聞は一見に如かず」です!


Page Topへ