本文大纲
《如何做性能测试》
性能测试案例2
性能测试案例:JDBC批处理与非批处理性能对比
目的
本次测试的主要目的是评估JDBC批处理(batch)与非批处理在Oracle和MySQL数据库中的性能表现。具体目标是通过比较两种插入方法的速度,了解它们之间的差异,并对实际应用中的数据插入操作提供参考建议。
软硬件条件
-
测试机 :
- 型号:ThinkPad T400 笔记本电脑
- 操作系统:Windows XP
- CPU:P8600 @ 2.4G
- 内存:2GB
- IP 地址:192.168.10.124
-
数据库服务器 :
- 型号:ThinkPad T400 笔记本电脑
- 操作系统:虚拟机 Windows Server 2003,分配了500MB内存
- IP 地址:192.168.10.139
-
数据库 :
- MySQL: 版本 5.0.18,默认安装配置
-
数据表定义:
CREATE TABLE `dev`.`test_insert` ( `id` INT NOT NULL, `uname` VARCHAR(10) NULL, PRIMARY KEY (`id`) ) ENGINE = InnoDB;
-
- Oracle: 版本 10G,默认安装配置
- MySQL: 版本 5.0.18,默认安装配置
-
JDBC驱动 :
- MySQL:mysql-connector-java-5.0.8
- Oracle:ojdbc6.jar(之前使用 ojdbc14.jar,导致部分插入失败)
测试方法
使用Java来编写测试程序,执行SQL语句来评估不同数据插入方式的性能。具体操作如下:
- 使用JDBC连接数据库,并通过Main方法分别进行批处理和非批处理的数据插入。
- 所有测试均在10万条记录的情况下进行,事务在所有数据插入完成后一次性提交。
结果
以下是MySQL和Oracle数据库在不同插入方式下的性能对比结果:
| 数据库 | 插入方法 | 每秒插入记录数 (条/秒) |
|---|---|---|
| MySQL | 非批处理 | 5700 |
| MySQL | 批处理 | 62500 |
| Oracle | 非批处理 | 4464 |
| Oracle | 批处理 | 27778 |
结论
-
MySQL数据库 :
- JDBC的batch插入10万条记录比for循环逐条执行insert SQL语句快约10.9倍(5700 vs. 62500 条/秒)。
-
Oracle数据库 :
- JDBC的batch插入10万条记录比for循环逐条执行insert SQL语句快约6.2倍(4464 vs. 27778 条/秒)。
注
-
对于MySQL,建议在JDBC连接字符串中添加
rewriteBatchedStatements=true参数,并确保使用5.1.13或更高版本的驱动程序以实现高效的批处理插入。例如:String connectionUrl = "jdbc:mysql://192.168.1.100:3306/test?rewriteBatchedStatements=true"; -
对于Oracle,推荐使用ojdbc6.jar驱动,避免之前使用ojdbc14.jar时遇到的部分插入失败的问题。
通过以上测试结果和建议,我们能够更好地理解JDBC批处理与非批处理在实际应用中的性能差异,并采取合适的策略优化数据插入操作。