※ ChatGPTを利用し、要約された質問です(原文:コネクションプールについて)
コネクションプールの有無でDB接続・切断を繰り返したときの差は?
このQ&Aのポイント
コネクションプール有とコネクションプール無でDB接続・切断を繰り返したときの差を試してみました。
Webアプリ上でコネクションプール有とコネクションプール無の実行時間を比較しました。
結果として、コネクションプール有とコネクションプール無では実行時間に大差はありませんでした。
コネクションプール有とコネクションプール無で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();
}
}
}
お礼
ご回答ありがとうございます。 ご指摘の通りAPサーバー、DBサーバーは同じPC上で テストしています。 SELECTでデータ取得している部分をコメント化し、 純粋なDB接続・切断処理を1万回ループさせて比較した ところ 【コネクションプール有】実行時間 582 ミリ秒 【コネクションプール無】実行時間 29712 ミリ秒 と大差が出ました。 ちなみに千回ループでは 【コネクションプール有】実行時間 176 ミリ秒 【コネクションプール無】実行時間 3060 ミリ秒 とこちらも大差でした。 ありがとうございました。