贴代码:
package com.dc.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
public class TestOraDb implements Runnable {
//驱动程序就是之前在classpath中配置的jdbc的驱动程序jar中
public static final String drive = "oracle.jdbc.driver.OracleDriver";
/**
* 连接地址,各个厂商提供单独记住
* jdbc:oracle:thin:@localhost:1521:ORCL localhost 是ip地址。
*/
public static final String url = "jdbc:oracle:thin:@192.168.2.3:1521:sss";
/**
* 用户 密码
*/
public static final String DBUSER="batch";
public static final String password="batch";
private String part;
private Integer cnt;
private Timestamp tsBegin;
private Timestamp tsEnd;
private long eclapse;
/**
* @param args
*/
public static void main(String[] args) {
List<TestOraDb> list = new ArrayList<TestOraDb>();
int i =10;
for(;i<30; i ++){
TestOraDb todb = new TestOraDb();
todb.setCnt(1000000);
todb.setPart("NBP201212" + i);
list.add(todb);
}
i =10;
for(;i<30; i ++){
TestOraDb todb = new TestOraDb();
todb.setCnt(1000000);
todb.setPart("NBP201211" + i);
list.add(todb);
}
for(int j = 0; j < list.size(); j++){
new Thread(list.get(j)).start();
}
}
/**
* create multi connections to oracle db
*/
public Connection getConnection(){
Connection conn = null;
try {
Class.forName(drive);
conn = DriverManager.getConnection(url,DBUSER,password); //连接数据库
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 实现多线程的接口处理
*/
public void run(){
execPLSQL();
}
public void execPLSQL() {
Connection conn = null;//表示数据库连接
//Statement.setFetchSize(100);
conn = getConnection();
Statement stmt = null;
ResultSet result = null;
try {
tsBegin = new Timestamp(System.currentTimeMillis());
stmt = conn.createStatement();
stmt.setFetchSize(100); //添加 fetchsize 这个很有效果。
String sql = "select t.citizen_card_no, t.txn_dt, t.txn_amt, t.txn_tp from ac_txn_his_dtl partition("+part+") t";
result = stmt.executeQuery(sql);
int i = 0;
while(result.next()){
String s = result.getString(1);
i ++ ;
}
tsEnd = new Timestamp(System.currentTimeMillis());
eclapse = tsEnd.getTime() - tsBegin.getTime() ;
System.out.println("分区是:"+part+"条数是:" + i + "时间是:" + eclapse + "秒");
//String sql = "{call test_query.lv_test_query(?,?)}";
// 创建CallableStatement
//cs = conn.prepareCall(sql);
// 给?赋相应的值
//cs.setString(1, this.part);
//cs.setInt(2, this.cnt);
// 执行
//cs.execute();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
// 关闭连接
if(result != null){
result.close();
}
stmt.close();
conn.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
}
public String getPart() {
return part;
}
public void setPart(String part) {
this.part = part;
}
public Integer getCnt() {
return cnt;
}
public void setCnt(Integer cnt) {
this.cnt = cnt;
}
}
粘贴测试性能。
---------------------1线程----------------------------------
分区时:NBP20121210条数是:703351时间是:117.351秒
---------------------1线程----设置fetchSize后效果-----------------------------
分区时:NBP20121210条数是:703351时间是:24.729秒
---------------------5线程-----------------------------------
分区是:NBP20121210条数是:703351时间是:170.355秒
分区是:NBP20121214条数是:710757时间是:173.376秒
分区是:NBP20121211条数是:731832时间是:175.839秒
分区是:NBP20121212条数是:728410时间是:176.827秒
分区是:NBP20121213条数是:757606时间是:182.540秒
---------------------5线程---fetchSize后效果----------------------------------
分区是:NBP20121210条数是:703351时间是:27.783秒
分区是:NBP20121214条数是:710757时间是:28.534秒
分区是:NBP20121211条数是:731832时间是:28.971秒
分区是:NBP20121212条数是:728410时间是:29.771秒
分区是:NBP20121213条数是:757606时间是:29.588秒
---------------------10线程------fetchSize效果--------------------------------
分区是:NBP20121217条数是:637975时间是:27.213秒
分区是:NBP20121210条数是:703351时间是:29.669秒
分区是:NBP20121214条数是:710757时间是:30.179秒
分区是:NBP20121218条数是:724779时间是:31.277秒
分区是:NBP20121216条数是:666196时间是:30.334秒
分区是:NBP20121211条数是:731832时间是:32.000秒
分区是:NBP20121212条数是:728410时间是:31.754秒
分区是:NBP20121219条数是:729637时间是:31.191秒
分区是:NBP20121213条数是:757606时间是:32.345秒
分区是:NBP20121215条数是:745822时间是:32.242秒
---------------------20线程-------fetchSize效果-----------------------------
分区是:NBP20121227条数是:673710时间是:38.677秒
分区是:NBP20121217条数是:637975时间是:37.323秒
分区是:NBP20121228条数是:643595时间是:38.124秒
分区是:NBP20121210条数是:703351时间是:40.315秒
分区是:NBP20121216条数是:666196时间是:39.966秒
分区是:NBP20121223条数是:687347时间是:40.250秒
分区是:NBP20121214条数是:710757时间是:40.552秒
分区是:NBP20121224条数是:692073时间是:40.881秒
分区是:NBP20121219条数是:729637时间是:42.372秒
分区是:NBP20121213条数是:757606时间是:43.005秒
分区是:NBP20121221条数是:707942时间是:40.340秒
分区是:NBP20121220条数是:743049时间是:42.420秒
分区是:NBP20121218条数是:724779时间是:41.431秒
分区是:NBP20121215条数是:745822时间是:43.472秒
分区是:NBP20121222条数是:708359时间是:41.571秒
分区是:NBP20121211条数是:731832时间是:42.654秒
分区是:NBP20121212条数是:728410时间是:42.953秒
分区是:NBP20121229条数是:749571时间是:42.129秒
分区是:NBP20121226条数是:768700时间是:42.979秒
分区是:NBP20121225条数是:765085时间是:42.871秒
---------------------30线程---------fetchSize效果-------------------------------
分区是:NBP20121217条数是:637975时间是:52.262秒
分区是:NBP20121111条数是:648771时间是:54.340秒
分区是:NBP20121210条数是:703351时间是:57.129秒
分区是:NBP20121223条数是:687347时间是:56.566秒
分区是:NBP20121216条数是:666196时间是:57.168秒
分区是:NBP20121221条数是:707942时间是:58.345秒
分区是:NBP20121228条数是:643595时间是:55.969秒
分区是:NBP20121215条数是:745822时间是:60.134秒
分区是:NBP20121213条数是:757606时间是:60.697秒
分区是:NBP20121219条数是:729637时间是:60.512秒
分区是:NBP20121214条数是:710757时间是:59.256秒
分区是:NBP20121211条数是:731832时间是:60.416秒
分区是:NBP20121110条数是:666050时间是:57.757秒
分区是:NBP20121212条数是:728410时间是:60.728秒
分区是:NBP20121227条数是:673710时间是:60.391秒
分区是:NBP20121224条数是:692073时间是:59.106秒
分区是:NBP20121222条数是:708359时间是:59.546秒
分区是:NBP20121218条数是:724779时间是:60.360秒
分区是:NBP20121114条数是:717144时间是:58.190秒
分区是:NBP20121220条数是:743049时间是:61.002秒
分区是:NBP20121113条数是:729691时间是:59.407秒
分区是:NBP20121117条数是:702545时间是:58.355秒
分区是:NBP20121225条数是:765085时间是:62.074秒
分区是:NBP20121115条数是:732176时间是:60.509秒
分区是:NBP20121116条数是:730449时间是:59.120秒
分区是:NBP20121229条数是:749571时间是:61.202秒
分区是:NBP20121112条数是:728333时间是:60.047秒
分区是:NBP20121119条数是:743183时间是:59.682秒
分区是:NBP20121226条数是:768700时间是:61.392秒
分区是:NBP20121118条数是:753491时间是:60.934秒
-----------------40线程---------fetchSize效果-------------------
分区是:NBP20121217条数是:637975时间是:66.666秒
分区是:NBP20121126条数是:571028时间是:63.758秒
分区是:NBP20121210条数是:703351时间是:72.579秒
分区是:NBP20121223条数是:687347时间是:72.970秒
分区是:NBP20121110条数是:666050时间是:74.066秒
分区是:NBP20121228条数是:643595时间是:72.916秒
分区是:NBP20121221条数是:707942时间是:76.833秒
分区是:NBP20121216条数是:666196时间是:75.247秒
分区是:NBP20121222条数是:708359时间是:76.996秒
分区是:NBP20121117条数是:702545时间是:77.236秒
分区是:NBP20121215条数是:745822时间是:78.723秒
分区是:NBP20121111条数是:648771时间是:73.280秒
分区是:NBP20121113条数是:729691时间是:78.287秒
分区是:NBP20121219条数是:729637时间是:77.866秒
分区是:NBP20121229条数是:749571时间是:79.390秒
分区是:NBP20121212条数是:728410时间是:78.545秒
分区是:NBP20121224条数是:692073时间是:76.945秒
分区是:NBP20121122条数是:622115时间是:74.359秒
分区是:NBP20121211条数是:731832时间是:79.164秒
分区是:NBP20121213条数是:757606时间是:79.909秒
分区是:NBP20121225条数是:765085时间是:80.926秒
分区是:NBP20121123条数是:679836时间是:75.158秒
分区是:NBP20121114条数是:717144时间是:79.140秒
分区是:NBP20121220条数是:743049时间是:79.340秒
分区是:NBP20121214条数是:710757时间是:77.265秒
分区是:NBP20121112条数是:728333时间是:78.560秒
分区是:NBP20121116条数是:730449时间是:78.785秒
分区是:NBP20121218条数是:724779时间是:77.529秒
分区是:NBP20121226条数是:768700时间是:80.905秒
分区是:NBP20121124条数是:722741时间是:78.593秒
分区是:NBP20121121条数是:733338时间是:79.133秒
分区是:NBP20121115条数是:732176时间是:77.597秒
分区是:NBP20121128条数是:746711时间是:79.196秒
分区是:NBP20121227条数是:673710时间是:78.395秒
分区是:NBP20121120条数是:730217时间是:76.892秒
分区是:NBP20121125条数是:754552时间是:79.533秒
分区是:NBP20121118条数是:753491时间是:82.253秒
分区是:NBP20121119条数是:743183时间是:77.063秒
分区是:NBP20121129条数是:745404时间是:76.832秒
分区是:NBP20121127条数是:743161时间是:77.723秒
可以很显然的看到使用 FetchSize开启以后效果是很明显的。
这里我的fetchSize的值为100