JDBC的效率问题研究和总结
2010-06-29 19:35
218 查看
JDBC的效率问题
1. 使用OCI比thin方式要好,但是前者是需要专有驱动程序的。
2. 语句结构一致的情况下,使用事先构造语句,这样会让oracle执行一个计划。
3. 链接过多的时候,使用连接池,这样利用oracle创建一个真链接比利用连接池创建一个假链接消耗资源要大多了。连接池的链接都呆在那里
4. 关于自动提交和禁止提交的问题。前者比后者要快3倍。
5. 关于批处理的问题,批处理是要快10倍,注意批处理和一个计划不是同一件事情。注意其中间包含5--30个句子是最优化的。但是这个批处理的异常是不确定的,难以说明这个处理异常返回的结果是批处理哪条语句造成的批处理的结果。例子如下:
myprepstatement=myconnection.preparestatement("insert into table"+"(vable) vables (?)");
//一个计划
For(int count=0;count<total_num;count++){
Myprepstatement.setInt(1,count);
Myprepstatement.execute();
}
//一个批处理
Count2=0;
For(int count=0;count<total_num;count++){
Myprepstatement.setInt(1,count);
Myprepstatement.addbatch();
}
Myprepstatement.execute();
6. ORACLE的批处理比标准JDBC的批处理更加快
7. 结果集的行数的获取的设置。设置越大,性能越好,但是程序占用内存很大。
8. 使用语句缓存;如果是隐式的缓存,则preparestatement对象必须一样,语句也必须一样,且statement不支持,也可以禁止隐式的缓存,而只处理自己需要缓存的语句;
连接池如何用?升级后是否兼容?------用jboss自带的连接池
语句缓存是否可以用到标准jdbc?------应该是可以
批处理的异常问题有没有解决的方法???-----没有看到,那位大拿有办法,联系我jjduys@163.com. 谢谢
实验:
批处理和计划处理的效率?
批处理的异常问题,也就是update为0的问题,这个是否有异常??如果没有,结果是什么-----没有异常
statment的批处理和preststment的计划处理二者的效率比较
Preststment 计划 和statment的批量处理,其更新的表中有6万条记录,无索引。基本和一个6万小区的表相同。更新的记录都是4000条,基本和一个omm的小区数相同,记录的时间是数据库执行的时间,其中程序运行的数据处理时间采取直接赋值的办法,可以认为没有时间开销。
自动提交是只是否批量提交。测试用的数据库是sun440上安装的oracle。
属性名 中文名称 说明 类型和取值说明 限定
preststment 计划 1*4000 非自动提交 139532ms
Preststment 计划 1*4000 自动提交 115584ms
Preststment 计划 4*1000 非自动提交
Preststment 计划 4*1000 自动提交 114835ms
Preststment 计划 100*40 非自动提交
Preststment 计划 100*40 自动提交 116943ms
statment 批处理 1*4000 非自动提交 180773ms
statment 批处理 1*4000 自动提交 156122ms
statment 批处理 4*1000 非自动提交
statment 批处理 4*1000 自动提交
statment 批处理 100*40 非自动提交
statment 批处理 100*40 自动提交 152389ms
delAndCreate 计划,批处理 1*4000 删除提交一次;插入自动提交一次 delete time 1846ms insert time 3614ms
delAndCreate 计划,批处理 1*4000 全部时间提交一次 delete time 1266ms insert time 6925ms
delAndCreate 计划,批处理 100*40 全部时间提交一次 delete time 282ms insert time 4219ms
delete time 1875ms insert time 5954ms
delete time 1500ms insert time 453ms commit time 1485ms
delAndCreate 计划,批处理 200*20 全部时间提交一次 delete time 281ms,insert time 9533ms
delAndCreate 计划,批处理 40*100 全部时间提交一次 delete time 1641ms,insert time 2172ms
delete time 312ms,insert time 8110ms
delete time 328ms,insert time 4923ms
delAndCreate 计划,批处理 20*200 全部时间提交一次 delete time 5437ms,insert time 3298ms
1. 使用OCI比thin方式要好,但是前者是需要专有驱动程序的。
2. 语句结构一致的情况下,使用事先构造语句,这样会让oracle执行一个计划。
3. 链接过多的时候,使用连接池,这样利用oracle创建一个真链接比利用连接池创建一个假链接消耗资源要大多了。连接池的链接都呆在那里
4. 关于自动提交和禁止提交的问题。前者比后者要快3倍。
5. 关于批处理的问题,批处理是要快10倍,注意批处理和一个计划不是同一件事情。注意其中间包含5--30个句子是最优化的。但是这个批处理的异常是不确定的,难以说明这个处理异常返回的结果是批处理哪条语句造成的批处理的结果。例子如下:
myprepstatement=myconnection.preparestatement("insert into table"+"(vable) vables (?)");
//一个计划
For(int count=0;count<total_num;count++){
Myprepstatement.setInt(1,count);
Myprepstatement.execute();
}
//一个批处理
Count2=0;
For(int count=0;count<total_num;count++){
Myprepstatement.setInt(1,count);
Myprepstatement.addbatch();
}
Myprepstatement.execute();
6. ORACLE的批处理比标准JDBC的批处理更加快
7. 结果集的行数的获取的设置。设置越大,性能越好,但是程序占用内存很大。
8. 使用语句缓存;如果是隐式的缓存,则preparestatement对象必须一样,语句也必须一样,且statement不支持,也可以禁止隐式的缓存,而只处理自己需要缓存的语句;
连接池如何用?升级后是否兼容?------用jboss自带的连接池
语句缓存是否可以用到标准jdbc?------应该是可以
批处理的异常问题有没有解决的方法???-----没有看到,那位大拿有办法,联系我jjduys@163.com. 谢谢
实验:
批处理和计划处理的效率?
批处理的异常问题,也就是update为0的问题,这个是否有异常??如果没有,结果是什么-----没有异常
statment的批处理和preststment的计划处理二者的效率比较
Preststment 计划 和statment的批量处理,其更新的表中有6万条记录,无索引。基本和一个6万小区的表相同。更新的记录都是4000条,基本和一个omm的小区数相同,记录的时间是数据库执行的时间,其中程序运行的数据处理时间采取直接赋值的办法,可以认为没有时间开销。
自动提交是只是否批量提交。测试用的数据库是sun440上安装的oracle。
属性名 中文名称 说明 类型和取值说明 限定
preststment 计划 1*4000 非自动提交 139532ms
Preststment 计划 1*4000 自动提交 115584ms
Preststment 计划 4*1000 非自动提交
Preststment 计划 4*1000 自动提交 114835ms
Preststment 计划 100*40 非自动提交
Preststment 计划 100*40 自动提交 116943ms
statment 批处理 1*4000 非自动提交 180773ms
statment 批处理 1*4000 自动提交 156122ms
statment 批处理 4*1000 非自动提交
statment 批处理 4*1000 自动提交
statment 批处理 100*40 非自动提交
statment 批处理 100*40 自动提交 152389ms
delAndCreate 计划,批处理 1*4000 删除提交一次;插入自动提交一次 delete time 1846ms insert time 3614ms
delAndCreate 计划,批处理 1*4000 全部时间提交一次 delete time 1266ms insert time 6925ms
delAndCreate 计划,批处理 100*40 全部时间提交一次 delete time 282ms insert time 4219ms
delete time 1875ms insert time 5954ms
delete time 1500ms insert time 453ms commit time 1485ms
delAndCreate 计划,批处理 200*20 全部时间提交一次 delete time 281ms,insert time 9533ms
delAndCreate 计划,批处理 40*100 全部时间提交一次 delete time 1641ms,insert time 2172ms
delete time 312ms,insert time 8110ms
delete time 328ms,insert time 4923ms
delAndCreate 计划,批处理 20*200 全部时间提交一次 delete time 5437ms,insert time 3298ms
相关文章推荐
- Mybatis学习笔记(一)——对原生jdbc中问题的总结
- 原生态jdbc程序中问题总结
- SQL语句效率问题的几点总结
- 实习总结四:周报,解决导出功能效率过慢问题
- 企业架构研究总结(2)——问题的由来和基本概念
- SQL语句效率问题的几点总结
- SQL语句效率问题的几点总结
- [研究总结]一类可以用二分图来描述的博弈问题
- jdbc原生态问题总结
- JDBC无封装下的标准代码和JDBC问题总结-V1.0
- mybatis学习笔记(1)-对原生jdbc程序中的问题总结
- [原]Nuttx内存管理的总结,碎片问题研究 @2012.07
- MySQL中Stmt 预处理提高效率问题的小研究
- 1Mybatis入门--1.1单独使用jdbc编程问题总结
- [我研究]7月第三周问题总结
- MySQL5.0中文问题及JDBC数据库连接和JSP汉字编码问题解决方法总结
- 对原生态jdbc程序中问题总结-敲过代码
- SQL语句效率问题的几点总结
- SQL语句效率问题的几点总结 <转>