IDEMPIERE-4613 Remove obsolete jdbctest class (#489)
This commit is contained in:
parent
055ad2f0ae
commit
79657a2fca
|
@ -1,472 +0,0 @@
|
|||
/******************************************************************************
|
||||
* Product: Adempiere ERP & CRM Smart Business Solution *
|
||||
* Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. *
|
||||
* This program is free software; you can redistribute it and/or modify it *
|
||||
* under the terms version 2 of the GNU General Public License as published *
|
||||
* by the Free Software Foundation. This program is distributed in the hope *
|
||||
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
||||
* See the GNU General Public License for more details. *
|
||||
* You should have received a copy of the GNU General Public License along *
|
||||
* with this program; if not, write to the Free Software Foundation, Inc., *
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
|
||||
* For the text or an alternative of this public license, you may reach us *
|
||||
* ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA *
|
||||
* or via info@compiere.org or http://www.compiere.org/license.html *
|
||||
*****************************************************************************/
|
||||
package org.compiere.dbPort;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
|
||||
import oracle.jdbc.pool.OracleDataSource;
|
||||
|
||||
//import oracle.jdbc.rowset.*;
|
||||
|
||||
/**
|
||||
* JDBC Performance Test - Oracle
|
||||
*
|
||||
* @author Jorg Janke
|
||||
* @version $Id: JdbcTest.java,v 1.2 2006/07/30 00:55:04 jjanke Exp $
|
||||
*/
|
||||
public class JdbcTest extends Thread
|
||||
{
|
||||
/*****************************************************************************
|
||||
|
||||
Multiple Connections Fetch=10 Conn=2032 Stmt=0 Query=47 Retrieve=2109 ClRs=0 ClStmt=0 ClConn=0 - Total=4188 Stmt=2156 Query=2156
|
||||
Multiple Connections Fetch=10 Conn=141 Stmt=0 Query=31 Retrieve=1875 ClRs=0 ClStmt=0 ClConn=0 - Total=2047 Stmt=1906 Query=1906
|
||||
Multiple Connections Fetch=10 Conn=141 Stmt=0 Query=31 Retrieve=1844 ClRs=0 ClStmt=0 ClConn=0 - Total=2016 Stmt=1875 Query=1875
|
||||
Data Source Fetch=10 Conn=172 Stmt=0 Query=16 Retrieve=1875 ClRs=0 ClStmt=0 ClConn=0 - Total=2063 Stmt=1891 Query=1891
|
||||
Data Source Fetch=10 Conn=672 Stmt=15 Query=16 Retrieve=1797 ClRs=0 ClStmt=0 ClConn=0 - Total=2500 Stmt=1828 Query=1813
|
||||
Data Source Fetch=10 Conn=156 Stmt=0 Query=16 Retrieve=1766 ClRs=0 ClStmt=0 ClConn=15 - Total=1953 Stmt=1782 Query=1782
|
||||
Connection Cache Fetch=10 Conn=141 Stmt=0 Query=125 Retrieve=1766 ClRs=0 ClStmt=0 ClConn=0 - Total=2032 Stmt=1891 Query=1891
|
||||
Connection Cache Fetch=10 Conn=0 Stmt=0 Query=15 Retrieve=1766 ClRs=0 ClStmt=0 ClConn=0 - Total=1781 Stmt=1781 Query=1781
|
||||
Connection Cache Fetch=10 Conn=0 Stmt=0 Query=16 Retrieve=1765 ClRs=0 ClStmt=0 ClConn=0 - Total=1781 Stmt=1781 Query=1781
|
||||
Multiple Connections Fetch=20 Conn=4501 Stmt=0 Query=15 Retrieve=1313 ClRs=0 ClStmt=0 ClConn=0 - Total=5829 Stmt=1328 Query=1328
|
||||
Multiple Connections Fetch=20 Conn=125 Stmt=0 Query=16 Retrieve=1312 ClRs=0 ClStmt=0 ClConn=0 - Total=1453 Stmt=1328 Query=1328
|
||||
Multiple Connections Fetch=20 Conn=141 Stmt=0 Query=31 Retrieve=1406 ClRs=0 ClStmt=0 ClConn=0 - Total=1578 Stmt=1437 Query=1437
|
||||
Data Source Fetch=20 Conn=126 Stmt=0 Query=31 Retrieve=1297 ClRs=0 ClStmt=0 ClConn=0 - Total=1454 Stmt=1328 Query=1328
|
||||
Data Source Fetch=20 Conn=125 Stmt=0 Query=16 Retrieve=1328 ClRs=0 ClStmt=0 ClConn=0 - Total=1469 Stmt=1344 Query=1344
|
||||
Data Source Fetch=20 Conn=140 Stmt=0 Query=16 Retrieve=1469 ClRs=0 ClStmt=0 ClConn=0 - Total=1625 Stmt=1485 Query=1485
|
||||
Connection Cache Fetch=20 Conn=0 Stmt=0 Query=31 Retrieve=1344 ClRs=0 ClStmt=0 ClConn=0 - Total=1375 Stmt=1375 Query=1375
|
||||
Connection Cache Fetch=20 Conn=0 Stmt=0 Query=16 Retrieve=1375 ClRs=0 ClStmt=0 ClConn=0 - Total=1391 Stmt=1391 Query=1391
|
||||
Connection Cache Fetch=20 Conn=0 Stmt=0 Query=15 Retrieve=1375 ClRs=0 ClStmt=0 ClConn=0 - Total=1390 Stmt=1390 Query=1390
|
||||
JDBC RowSet Fetch=10 Conn=16 Stmt=0 Query=3969 Retrieve=3047 ClRs=0 ClStmt=0 ClConn=0 - Total=7032 Stmt=7016 Query=7016
|
||||
JDBC RowSet Fetch=10 Conn=0 Stmt=0 Query=172 Retrieve=2781 ClRs=0 ClStmt=0 ClConn=0 - Total=2953 Stmt=2953 Query=2953
|
||||
JDBC RowSet Fetch=10 Conn=0 Stmt=0 Query=313 Retrieve=2609 ClRs=0 ClStmt=0 ClConn=0 - Total=2922 Stmt=2922 Query=2922
|
||||
Cached RowSet Fetch=10 Conn=63 Stmt=0 Query=5406 Retrieve=16 ClRs=0 ClStmt=0 ClConn=0 - Total=5485 Stmt=5422 Query=5422
|
||||
Cached RowSet Fetch=10 Conn=0 Stmt=0 Query=3907 Retrieve=0 ClRs=0 ClStmt=0 ClConn=0 - Total=3907 Stmt=3907 Query=3907
|
||||
Cached RowSet Fetch=10 Conn=0 Stmt=0 Query=3890 Retrieve=0 ClRs=0 ClStmt=0 ClConn=0 - Total=3890 Stmt=3890 Query=3890
|
||||
Shared Connection Threads=10 Yield=false ms= 18267 each= 1826
|
||||
Shared Connection Threads=10 Yield=false ms= 18220 each= 1822
|
||||
Shared Connection Threads=10 Yield=true ms= 18329 each= 1832
|
||||
Shared Connection Threads=10 Yield=true ms= 18314 each= 1831
|
||||
Multiple Connections Threads=10 Yield=false ms= 14610 each= 1461
|
||||
Multiple Connections Threads=10 Yield=false ms= 14360 each= 1436
|
||||
Multiple Connections Threads=10 Yield=true ms= 13986 each= 1398
|
||||
Multiple Connections Threads=10 Yield=true ms= 14017 each= 1401
|
||||
Multiple PreCreated Threads=10 Yield=false ms= 5376 each= 537
|
||||
Multiple PreCreated Threads=10 Yield=false ms= 1828 each= 182
|
||||
Multiple PreCreated Threads=10 Yield=true ms= 12017 each= 1201
|
||||
Multiple PreCreated Threads=10 Yield=true ms= 12032 each= 1203
|
||||
Data Source Threads=10 Yield=false ms= 13391 each= 1339
|
||||
Data Source Threads=10 Yield=false ms= 13532 each= 1353
|
||||
Data Source Threads=10 Yield=true ms= 13923 each= 1392
|
||||
Data Source Threads=10 Yield=true ms= 13829 each= 1382
|
||||
Connection Cache Threads=10 Yield=false ms= 12907 each= 1290 CacheSize=2, Active=0
|
||||
Connection Cache Threads=10 Yield=false ms= 12907 each= 1290 CacheSize=2, Active=0
|
||||
Connection Cache Threads=10 Yield=true ms= 12813 each= 1281 CacheSize=2, Active=0
|
||||
Connection Cache Threads=10 Yield=true ms= 12813 each= 1281 CacheSize=2, Active=0
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
// Default no of threads to 10
|
||||
private static final int NUM_OF_THREADS = 10;
|
||||
|
||||
private static final String DRIVER =
|
||||
// "oci8";
|
||||
"thin";
|
||||
|
||||
private static final String CONNECTION =
|
||||
// "jdbc:oracle:oci8:@";
|
||||
// "jdbc:oracle:oci8:@dev1";
|
||||
"jdbc:oracle:thin:@//dev:1521/dev1";
|
||||
|
||||
|
||||
private static final String UID = "adempiere";
|
||||
private static final String PWD = "adempiere";
|
||||
private static final String STATEMENT = "SELECT * FROM AD_Column";
|
||||
private static final boolean WITH_OUTPUT = false;
|
||||
|
||||
private static boolean s_do_yield = true;
|
||||
|
||||
private static Connection s_sconn = null;
|
||||
private static Connection[] s_conn = null;
|
||||
private static OracleDataSource s_ds = null;
|
||||
// private static OracleConnectionCacheImpl s_cc = null;
|
||||
|
||||
private static int s_fetchSize = 10;
|
||||
|
||||
// Connection
|
||||
private static int s_cType = 0;
|
||||
private static final String[] C_INFO = {
|
||||
"Shared Connection ",
|
||||
"Multiple Connections ",
|
||||
"Multiple PreCreated ",
|
||||
"Data Source ",
|
||||
"Connection Cache "};
|
||||
private static final int C_SHARED = 0;
|
||||
private static final int C_MULTIPLE = 1;
|
||||
private static final int C_PRECREATED = 2;
|
||||
private static final int C_DATASOURCE = 3;
|
||||
private static final int C_CACHE = 4;
|
||||
|
||||
// Data
|
||||
//private static int s_rType = 0;
|
||||
/*private static final String[] R_INFO = {
|
||||
"ResultSet ",
|
||||
"Cached RowSet ",
|
||||
"JDBC RowSet "};*/
|
||||
|
||||
//private static final int R_CACHED_ROWSET = 1;
|
||||
//private static final int R_JDBC_ROWSET = 2;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Main Test Start
|
||||
* @param args
|
||||
*/
|
||||
public static void main (String args [])
|
||||
{
|
||||
try
|
||||
{
|
||||
/* Load the JDBC driver */
|
||||
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
|
||||
|
||||
s_ds = new OracleDataSource();
|
||||
s_ds.setDriverType(DRIVER);
|
||||
s_ds.setServerName("dev");
|
||||
s_ds.setNetworkProtocol("tcp");
|
||||
s_ds.setDatabaseName("dev1");
|
||||
s_ds.setPortNumber(1521);
|
||||
s_ds.setUser("adempiere");
|
||||
s_ds.setPassword("adempiere");
|
||||
/*
|
||||
s_cc = new OracleConnectionCacheImpl();
|
||||
s_cc.setDriverType(DRIVER);
|
||||
s_cc.setServerName("dev");
|
||||
s_cc.setNetworkProtocol("tcp");
|
||||
s_cc.setDatabaseName("dev1");
|
||||
s_cc.setPortNumber(1521);
|
||||
s_cc.setUser("adempiere");
|
||||
s_cc.setPassword("adempiere");
|
||||
s_cc.setMaxLimit(NUM_OF_THREADS/4);
|
||||
s_cc.setCacheScheme(OracleConnectionCacheImpl.FIXED_WAIT_SCHEME);
|
||||
// s_cc.setCacheScheme(OracleConnectionCacheImpl.DYNAMIC_SCHEME);
|
||||
*/
|
||||
|
||||
s_fetchSize = 10;
|
||||
s_cType = C_MULTIPLE;
|
||||
statementTiming();
|
||||
statementTiming();
|
||||
statementTiming();
|
||||
s_cType = C_DATASOURCE;
|
||||
statementTiming();
|
||||
statementTiming();
|
||||
statementTiming();
|
||||
s_cType = C_CACHE;
|
||||
statementTiming();
|
||||
statementTiming();
|
||||
statementTiming();
|
||||
s_fetchSize = 20;
|
||||
s_cType = C_MULTIPLE;
|
||||
statementTiming();
|
||||
statementTiming();
|
||||
statementTiming();
|
||||
s_cType = C_DATASOURCE;
|
||||
statementTiming();
|
||||
statementTiming();
|
||||
statementTiming();
|
||||
s_cType = C_CACHE;
|
||||
statementTiming();
|
||||
statementTiming();
|
||||
statementTiming();
|
||||
//
|
||||
s_fetchSize = 10; // standard value
|
||||
/**
|
||||
s_rType = R_JDBC_ROWSET;
|
||||
rowSetTiming();
|
||||
rowSetTiming();
|
||||
rowSetTiming();
|
||||
s_rType = R_CACHED_ROWSET;
|
||||
rowSetTiming();
|
||||
rowSetTiming();
|
||||
rowSetTiming();
|
||||
**/
|
||||
//
|
||||
s_cType = C_SHARED;
|
||||
s_do_yield = false;
|
||||
runTest();
|
||||
runTest();
|
||||
s_do_yield = true;
|
||||
runTest();
|
||||
runTest();
|
||||
//
|
||||
s_cType = C_MULTIPLE;
|
||||
s_do_yield = false;
|
||||
runTest();
|
||||
runTest();
|
||||
s_do_yield = true;
|
||||
runTest();
|
||||
runTest();
|
||||
//
|
||||
s_cType = C_PRECREATED;
|
||||
s_do_yield = false;
|
||||
runTest();
|
||||
runTest();
|
||||
s_do_yield = true;
|
||||
runTest();
|
||||
runTest();
|
||||
//
|
||||
s_cType = C_DATASOURCE;
|
||||
s_do_yield = false;
|
||||
runTest();
|
||||
runTest();
|
||||
s_do_yield = true;
|
||||
runTest();
|
||||
runTest();
|
||||
//
|
||||
s_cType = C_CACHE;
|
||||
s_do_yield = false;
|
||||
runTest();
|
||||
runTest();
|
||||
s_do_yield = true;
|
||||
runTest();
|
||||
runTest();
|
||||
//
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
} // main
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/**
|
||||
* Run the test
|
||||
* @throws Exception
|
||||
*/
|
||||
static void runTest() throws Exception
|
||||
{
|
||||
// Create the threads
|
||||
Thread[] threadList = new Thread[NUM_OF_THREADS];
|
||||
s_conn = new Connection[NUM_OF_THREADS];
|
||||
|
||||
if (s_cType == C_SHARED)
|
||||
s_sconn = DriverManager.getConnection (CONNECTION, UID, PWD);
|
||||
//
|
||||
// spawn threads
|
||||
for (int i = 0; i < NUM_OF_THREADS; i++)
|
||||
{
|
||||
if (s_cType == C_PRECREATED)
|
||||
s_conn[i] = DriverManager.getConnection (CONNECTION, UID, PWD);
|
||||
//
|
||||
threadList[i] = new JdbcTest(i);
|
||||
threadList[i].start();
|
||||
}
|
||||
// Start everyone at the same time
|
||||
long start = System.currentTimeMillis();
|
||||
setGreenLight ();
|
||||
// wait for all threads to end
|
||||
for (int i = 0; i < NUM_OF_THREADS; i++)
|
||||
threadList[i].join();
|
||||
//
|
||||
if (s_sconn != null)
|
||||
s_sconn.close();
|
||||
s_sconn = null;
|
||||
for (int i = 0; i < NUM_OF_THREADS; i++)
|
||||
{
|
||||
if (s_conn[i] != null)
|
||||
s_conn[i].close();
|
||||
s_conn[i] = null;
|
||||
}
|
||||
long result = System.currentTimeMillis() - start;
|
||||
System.out.print (C_INFO[s_cType]
|
||||
+ "Threads=" + NUM_OF_THREADS
|
||||
+ " \tYield=" + s_do_yield
|
||||
+ " \tms= " + result
|
||||
+ " \teach= " + (result/NUM_OF_THREADS));
|
||||
// if (s_cType == C_CACHE)
|
||||
// System.out.print (" \tCacheSize=" + s_cc.getCacheSize() + ", Active=" + s_cc.getActiveSize());
|
||||
System.out.println();
|
||||
} // runTest
|
||||
|
||||
|
||||
/**
|
||||
* Statement Timing
|
||||
*/
|
||||
private static void statementTiming()
|
||||
{
|
||||
try
|
||||
{
|
||||
long startConnection = System.currentTimeMillis();
|
||||
Connection conn = null;
|
||||
if (s_cType == C_MULTIPLE)
|
||||
conn = DriverManager.getConnection (CONNECTION, UID, PWD);
|
||||
if (s_cType == C_DATASOURCE)
|
||||
conn = s_ds.getConnection();
|
||||
// if (s_cType == C_CACHE)
|
||||
// conn = s_cc.getConnection();
|
||||
|
||||
long startStatement = System.currentTimeMillis();
|
||||
Statement stmt = conn.createStatement ();
|
||||
stmt.setFetchSize(s_fetchSize);
|
||||
|
||||
long startQuery = System.currentTimeMillis();
|
||||
ResultSet rs = stmt.executeQuery (STATEMENT);
|
||||
|
||||
//int i = 0;
|
||||
long startRetrieve = System.currentTimeMillis();
|
||||
while (rs.next())
|
||||
{
|
||||
rs.getString(1);
|
||||
//i++;
|
||||
}
|
||||
long endRetrieve = System.currentTimeMillis();
|
||||
// System.out.println(i);
|
||||
|
||||
rs.close();
|
||||
rs = null;
|
||||
long endQuery = System.currentTimeMillis();
|
||||
|
||||
stmt.close();
|
||||
stmt = null;
|
||||
long endStatement = System.currentTimeMillis();
|
||||
|
||||
conn.close();
|
||||
conn = null;
|
||||
long endConnection = System.currentTimeMillis();
|
||||
|
||||
//
|
||||
System.out.println(C_INFO[s_cType]
|
||||
+ "Fetch=" + s_fetchSize
|
||||
+ " \tConn=" + (startStatement - startConnection)
|
||||
+ " \tStmt=" + (startQuery - startStatement)
|
||||
+ " \tQuery=" + (startRetrieve - startQuery)
|
||||
+ " \tRetrieve=" + (endRetrieve - startRetrieve)
|
||||
+ " \tClRs=" + (endQuery - endRetrieve)
|
||||
+ " \tClStmt=" + (endStatement - endQuery)
|
||||
+ " \tClConn=" + (endConnection - endStatement)
|
||||
+ " \t- Total=" + (endConnection - startConnection)
|
||||
+ " \tStmt=" + (endStatement - startStatement)
|
||||
+ " \tQuery=" + (endQuery - startQuery));
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
} // statementTiming
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/**
|
||||
* JDBC Test
|
||||
* @param id Thread ID
|
||||
*/
|
||||
public JdbcTest(int id)
|
||||
{
|
||||
super();
|
||||
m_myId = id;
|
||||
} // JdbcTest
|
||||
|
||||
private int m_myId = 0;
|
||||
|
||||
/**
|
||||
* Async Worker
|
||||
*/
|
||||
public void run()
|
||||
{
|
||||
ResultSet rs = null;
|
||||
Statement stmt = null;
|
||||
|
||||
try
|
||||
{
|
||||
while (!getGreenLight())
|
||||
yield();
|
||||
if (WITH_OUTPUT)
|
||||
System.out.println("Thread " + m_myId + " started");
|
||||
|
||||
// Get the connection & statement
|
||||
if (s_cType == C_SHARED)
|
||||
stmt = s_sconn.createStatement ();
|
||||
else if (s_cType == C_MULTIPLE)
|
||||
{
|
||||
s_conn[m_myId] = DriverManager.getConnection (CONNECTION, UID, PWD);
|
||||
stmt = s_conn[m_myId].createStatement ();
|
||||
}
|
||||
else if (s_cType == C_PRECREATED)
|
||||
{
|
||||
stmt = s_conn[m_myId].createStatement ();
|
||||
}
|
||||
else if (s_cType == C_DATASOURCE)
|
||||
{
|
||||
s_conn[m_myId] = s_ds.getConnection();
|
||||
stmt = s_conn[m_myId].createStatement ();
|
||||
}
|
||||
// else if (s_cType == C_CACHE)
|
||||
// {
|
||||
// s_conn[m_myId] = s_cc.getConnection();
|
||||
// stmt = s_conn[m_myId].createStatement ();
|
||||
// }
|
||||
stmt.setFetchSize(s_fetchSize);
|
||||
|
||||
// Execute the Query
|
||||
rs = stmt.executeQuery (STATEMENT);
|
||||
|
||||
// Loop through the results
|
||||
while (rs.next())
|
||||
{
|
||||
if (s_do_yield)
|
||||
yield(); // Yield To other threads
|
||||
}
|
||||
|
||||
// Close all the resources
|
||||
rs.close();
|
||||
rs = null;
|
||||
|
||||
// Close the statement
|
||||
stmt.close();
|
||||
stmt = null;
|
||||
|
||||
// Close the local connection
|
||||
if (s_cType == C_SHARED || s_cType == C_PRECREATED)
|
||||
;
|
||||
else
|
||||
{
|
||||
s_conn[m_myId].close();
|
||||
s_conn[m_myId] = null;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
System.out.println("Thread " + m_myId + " got Exception: " + e);
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
if (WITH_OUTPUT)
|
||||
System.out.println("Thread " + m_myId + " finished");
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
static boolean greenLight = false;
|
||||
static synchronized void setGreenLight () { greenLight = true; }
|
||||
synchronized boolean getGreenLight () { return greenLight; }
|
||||
|
||||
} // JdbcTest
|
|
@ -1,350 +0,0 @@
|
|||
/******************************************************************************
|
||||
* Product: Adempiere ERP & CRM Smart Business Solution
|
||||
* Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved.
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms version 2 of the GNU General Public License as published
|
||||
* by the Free Software Foundation. This program is distributed in the hope
|
||||
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
* You may reach us at: ComPiere, Inc. - http://www.compiere.org/license.html
|
||||
* 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA or info@compiere.org
|
||||
*****************************************************************************/
|
||||
package org.compiere.dbPort;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
|
||||
/**
|
||||
* JDBC Performance Test.
|
||||
*
|
||||
* @author Jorg Janke
|
||||
* @version $Id: JdbcTestPG.java,v 1.4 2005/03/11 20:29:03 jjanke Exp $
|
||||
*/
|
||||
public class JdbcTestPG extends Thread
|
||||
{
|
||||
/*****************************************************************************
|
||||
|
||||
Multiple Connections Fetch=10 Conn=407 Stmt=15 Query=1516 Retrieve=203 ClRs=0 ClStmt=0 ClConn=0 - Total=2141 Stmt=1734 Query=1719
|
||||
Multiple Connections Fetch=10 Conn=47 Stmt=0 Query=1234 Retrieve=31 ClRs=0 ClStmt=0 ClConn=0 - Total=1312 Stmt=1265 Query=1265
|
||||
Multiple Connections Fetch=10 Conn=31 Stmt=0 Query=1266 Retrieve=15 ClRs=0 ClStmt=0 ClConn=0 - Total=1312 Stmt=1281 Query=1281
|
||||
Shared Connection Threads=10 Yield=false ms= 13047 each= 1304
|
||||
Shared Connection Threads=10 Yield=false ms= 12891 each= 1289
|
||||
Shared Connection Threads=10 Yield=true ms= 13422 each= 1342
|
||||
Shared Connection Threads=10 Yield=true ms= 12969 each= 1296
|
||||
Multiple Connections Threads=10 Yield=false ms= 13046 each= 1304
|
||||
Multiple Connections Threads=10 Yield=false ms= 12891 each= 1289
|
||||
Multiple Connections Threads=10 Yield=true ms= 13062 each= 1306
|
||||
Multiple Connections Threads=10 Yield=true ms= 13062 each= 1306
|
||||
Multiple PreCreated Threads=10 Yield=false ms= 9968 each= 996
|
||||
Multiple PreCreated Threads=10 Yield=false ms= 10250 each= 1025
|
||||
Multiple PreCreated Threads=10 Yield=true ms= 10109 each= 1010
|
||||
Multiple PreCreated Threads=10 Yield=true ms= 9906 each= 990
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
// Default no of threads to 10
|
||||
private static final int NUM_OF_THREADS = 10;
|
||||
|
||||
private static final String CONNECTION =
|
||||
"jdbc:postgresql://linux:5432/compiere";
|
||||
|
||||
private static final String UID = "compiere";
|
||||
private static final String PWD = "compiere";
|
||||
private static final String STATEMENT = "SELECT * FROM AD_Column";
|
||||
private static final boolean WITH_OUTPUT = false;
|
||||
|
||||
private static boolean s_do_yield = true;
|
||||
|
||||
private static Connection s_sconn = null;
|
||||
private static Connection[] s_conn = null;
|
||||
|
||||
private static int s_fetchSize = 10;
|
||||
|
||||
// Connection
|
||||
private static int s_cType = 0;
|
||||
private static final String[] C_INFO = {
|
||||
"Shared Connection ",
|
||||
"Multiple Connections ",
|
||||
"Multiple PreCreated ",
|
||||
// "Data Source ",
|
||||
// "Connection Cache "
|
||||
};
|
||||
private static final int C_SHARED = 0;
|
||||
private static final int C_MULTIPLE = 1;
|
||||
private static final int C_PRECREATED = 2;
|
||||
// private static final int C_DATASOURCE = 3;
|
||||
// private static final int C_CACHE = 4;
|
||||
|
||||
// Data
|
||||
/*private static final String[] R_INFO = {
|
||||
"ResultSet ",
|
||||
// "Cached RowSet ",
|
||||
// "JDBC RowSet "
|
||||
};*/
|
||||
// private static final int R_CACHED_ROWSET = 1;
|
||||
// private static final int R_JDBC_ROWSET = 2;
|
||||
|
||||
|
||||
/**
|
||||
* Main Test
|
||||
* @param args
|
||||
*/
|
||||
public static void main (String args [])
|
||||
{
|
||||
try
|
||||
{
|
||||
/* Load the JDBC driver */
|
||||
DriverManager.registerDriver(new org.postgresql.Driver());
|
||||
|
||||
s_cType = C_MULTIPLE;
|
||||
statementTiming();
|
||||
statementTiming();
|
||||
statementTiming();
|
||||
//
|
||||
s_fetchSize = 10; // standard value
|
||||
|
||||
//
|
||||
s_cType = C_SHARED;
|
||||
s_do_yield = false;
|
||||
runTest();
|
||||
runTest();
|
||||
s_do_yield = true;
|
||||
runTest();
|
||||
runTest();
|
||||
//
|
||||
s_cType = C_MULTIPLE;
|
||||
s_do_yield = false;
|
||||
runTest();
|
||||
runTest();
|
||||
s_do_yield = true;
|
||||
runTest();
|
||||
runTest();
|
||||
//
|
||||
s_cType = C_PRECREATED;
|
||||
s_do_yield = false;
|
||||
runTest();
|
||||
runTest();
|
||||
s_do_yield = true;
|
||||
runTest();
|
||||
runTest();
|
||||
//
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
} // main
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/**
|
||||
* Run the test
|
||||
* @throws Exception
|
||||
*/
|
||||
static void runTest() throws Exception
|
||||
{
|
||||
// Create the threads
|
||||
Thread[] threadList = new Thread[NUM_OF_THREADS];
|
||||
s_conn = new Connection[NUM_OF_THREADS];
|
||||
|
||||
if (s_cType == C_SHARED)
|
||||
s_sconn = DriverManager.getConnection (CONNECTION, UID, PWD);
|
||||
//
|
||||
// spawn threads
|
||||
for (int i = 0; i < NUM_OF_THREADS; i++)
|
||||
{
|
||||
if (WITH_OUTPUT)
|
||||
System.out.println("Starting #" + i);
|
||||
if (s_cType == C_PRECREATED)
|
||||
s_conn[i] = DriverManager.getConnection (CONNECTION, UID, PWD);
|
||||
//
|
||||
threadList[i] = new JdbcTestPG(i);
|
||||
threadList[i].start();
|
||||
}
|
||||
|
||||
// Start everyone at the same time
|
||||
long start = System.currentTimeMillis();
|
||||
setGreenLight ();
|
||||
|
||||
// wait for all threads to end
|
||||
for (int i = 0; i < NUM_OF_THREADS; i++)
|
||||
threadList[i].join();
|
||||
//
|
||||
if (s_sconn != null)
|
||||
s_sconn.close();
|
||||
s_sconn = null;
|
||||
for (int i = 0; i < NUM_OF_THREADS; i++)
|
||||
{
|
||||
if (s_conn[i] != null)
|
||||
s_conn[i].close();
|
||||
s_conn[i] = null;
|
||||
}
|
||||
long result = System.currentTimeMillis() - start;
|
||||
System.out.print (C_INFO[s_cType]
|
||||
+ "Threads=" + NUM_OF_THREADS
|
||||
+ " \tYield=" + s_do_yield
|
||||
+ " \tms= " + result
|
||||
+ " \teach= " + (result/NUM_OF_THREADS));
|
||||
System.out.println();
|
||||
} // runTest
|
||||
|
||||
|
||||
/**
|
||||
* Statement Timing
|
||||
*/
|
||||
private static void statementTiming()
|
||||
{
|
||||
try
|
||||
{
|
||||
long startConnection = System.currentTimeMillis();
|
||||
Connection conn = null;
|
||||
if (s_cType == C_MULTIPLE)
|
||||
conn = DriverManager.getConnection (CONNECTION, UID, PWD);
|
||||
|
||||
long startStatement = System.currentTimeMillis();
|
||||
Statement stmt = conn.createStatement ();
|
||||
// stmt.setFetchSize(s_fetchSize);
|
||||
|
||||
long startQuery = System.currentTimeMillis();
|
||||
ResultSet rs = stmt.executeQuery (STATEMENT);
|
||||
|
||||
//int i = 0;
|
||||
long startRetrieve = System.currentTimeMillis();
|
||||
while (rs.next())
|
||||
{
|
||||
rs.getString(1);
|
||||
//i++;
|
||||
}
|
||||
long endRetrieve = System.currentTimeMillis();
|
||||
// System.out.println(i);
|
||||
|
||||
rs.close();
|
||||
rs = null;
|
||||
long endQuery = System.currentTimeMillis();
|
||||
|
||||
stmt.close();
|
||||
stmt = null;
|
||||
long endStatement = System.currentTimeMillis();
|
||||
|
||||
conn.close();
|
||||
conn = null;
|
||||
long endConnection = System.currentTimeMillis();
|
||||
|
||||
//
|
||||
System.out.println(C_INFO[s_cType]
|
||||
+ "Fetch=" + s_fetchSize
|
||||
+ " \tConn=" + (startStatement - startConnection)
|
||||
+ " \tStmt=" + (startQuery - startStatement)
|
||||
+ " \tQuery=" + (startRetrieve - startQuery)
|
||||
+ " \tRetrieve=" + (endRetrieve - startRetrieve)
|
||||
+ " \tClRs=" + (endQuery - endRetrieve)
|
||||
+ " \tClStmt=" + (endStatement - endQuery)
|
||||
+ " \tClConn=" + (endConnection - endStatement)
|
||||
+ " \t- Total=" + (endConnection - startConnection)
|
||||
+ " \tStmt=" + (endStatement - startStatement)
|
||||
+ " \tQuery=" + (endQuery - startQuery));
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
} // statementTiming
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/**
|
||||
* JdbcTest Thread
|
||||
* @param id Thread ID
|
||||
*/
|
||||
public JdbcTestPG (int id)
|
||||
{
|
||||
super();
|
||||
m_myId = id;
|
||||
}
|
||||
|
||||
private int m_myId = 0;
|
||||
|
||||
/**
|
||||
* Async Worker
|
||||
*/
|
||||
public void run()
|
||||
{
|
||||
ResultSet rs = null;
|
||||
Statement stmt = null;
|
||||
|
||||
try
|
||||
{
|
||||
if (WITH_OUTPUT)
|
||||
System.out.println("Thread " + m_myId + " waiting");
|
||||
while (!getGreenLight())
|
||||
yield();
|
||||
if (WITH_OUTPUT)
|
||||
System.out.println("Thread " + m_myId + " started");
|
||||
|
||||
// Get the connection & statement
|
||||
if (s_cType == C_SHARED)
|
||||
stmt = s_sconn.createStatement ();
|
||||
else if (s_cType == C_MULTIPLE)
|
||||
{
|
||||
s_conn[m_myId] = DriverManager.getConnection (CONNECTION, UID, PWD);
|
||||
stmt = s_conn[m_myId].createStatement ();
|
||||
}
|
||||
else if (s_cType == C_PRECREATED)
|
||||
{
|
||||
stmt = s_conn[m_myId].createStatement ();
|
||||
}
|
||||
// stmt.setFetchSize(s_fetchSize);
|
||||
|
||||
// Execute the Query
|
||||
rs = stmt.executeQuery (STATEMENT);
|
||||
|
||||
// Loop through the results
|
||||
while (rs.next())
|
||||
{
|
||||
if (s_do_yield)
|
||||
yield(); // Yield To other threads
|
||||
}
|
||||
|
||||
// Close all the resources
|
||||
rs.close();
|
||||
rs = null;
|
||||
|
||||
// Close the statement
|
||||
stmt.close();
|
||||
stmt = null;
|
||||
|
||||
// Close the local connection
|
||||
if (s_cType == C_SHARED || s_cType == C_PRECREATED)
|
||||
;
|
||||
else
|
||||
{
|
||||
s_conn[m_myId].close();
|
||||
s_conn[m_myId] = null;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
System.out.println("Thread " + m_myId + " got Exception: " + e);
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
if (WITH_OUTPUT)
|
||||
System.out.println("Thread " + m_myId + " finished");
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
static boolean greenLight = false;
|
||||
static synchronized void setGreenLight () { greenLight = true; }
|
||||
synchronized boolean getGreenLight () { return greenLight; }
|
||||
|
||||
} // JdbcTestPG
|
Loading…
Reference in New Issue