测试环境基本信息:
OS:Windows XP sp3
DB:Oracle 9.2.0.1 未启用归档
DB重做日志文件大小:100MB
硬盘型号:SAMSUNG HD161GJ(SATA-300,160G,7200rpm,8M cache)
CPU:Intel Core2 E8400(3.0G)
内存:2G
通过HD Tune得到的硬盘基本测试信息,
IOPS:66
读取:90MB/s
写入:82MB/s
测试表脚本:
create table T_EMPLOYEE ( ID NUMBER(10) not null, NAME VARCHAR2(20) not null, CREATE_DATE DATE default sysdate not null, BIRTHDAY DATE, ADDRESS VARCHAR2(200), EMAIL VARCHAR2(200), MOBILEPHONE VARCHAR2(11), TELEPHONE VARCHAR2(20), IDENTITY_CARD VARCHAR2(18), WEIGHT NUMBER, HEIGHT NUMBER ) |
插入10万条记录,采用Java JDBC方式的测试结果如下(单位:秒):
执行方式 | OCI | OCI | thin | thin |
Statement(test1) | 69.84 | 67.03 | 66.96 | 42.81 |
PreparedStatement(test2) | 40 | 37.18 | 39.21 | 12.66 |
PreparedStatement Batch(test3) | 51.72 | 50.78 | 2.81 | 2.81 |
从测试结果可以看出,采用thin连接方式 batch插入的性能最好,而采用oci的batch插入性能未得到提高,也可能是bug。
记得以前在ORACLE文档里说采用oci模式的性能最好,9i中经过测试完全不成立,我想可能是以前java本身性能的问题,现在java语言的性能已经非常好了,thin连接方式不管是从管理还性能方面来说都是首选了。
注:采用oci的batch插入性能未得到提高确实是BUG,后来把ORACLE客户端升级到9.2.0.8,花的时间只要6s,但还是比thin的方式差。