[原] Oracel JDBC 内存 有关问题
[原] Oracel JDBC 内存 问题
常见的 business web application应该不会有OOM问题, 因为所查询的数据量本身就比较小, 这种appliaction更多的是强调 table relationship, 业务 rule, and filter之类的.
但还有一部分程序是做后台的大数据的分析或是同步, 尤其是在分布式环境的维护.
常见的 business web application应该不会有OOM问题, 因为所查询的数据量本身就比较小, 这种appliaction更多的是强调 table relationship, 业务 rule, and filter之类的.
但还有一部分程序是做后台的大数据的分析或是同步, 尤其是在分布式环境的维护.
直接写stored procedure了吧..难道你还全取出来用完再塞回去么?而且你觉得换个数据库和jdbc驱动就不会出现这个问题么.
常见的 business web application应该不会有OOM问题, 因为所查询的数据量本身就比较小, 这种appliaction更多的是强调 table relationship, 业务 rule, and filter之类的.
但还有一部分程序是做后台的大数据的分析或是同步, 尤其是在分布式环境的维护.
直接写stored procedure了吧..难道你还全取出来用完再塞回去么?而且你觉得换个数据库和jdbc驱动就不会出现这个问题么.
用stored procedure解决业务计算? 每个人所处的Application和Business都不一样.
如果你没有遇到过 scale out 问题, 没有Global Level Database问题.
你就不会理解这些问题:
for example:
user信息是存在不同城市的 物理 Database Instance的, 你根本就无法在DataBase level处理一个新的用户是否已经在系统了.
这些都是 sale out的基本问题!
扯远了! 只想说: 如果你没遇到这个问题, 表示你所处Application和Business和我的不一样.或是你的解决方案不用 Oracle Database and Java
恩, 谢谢提醒, 这个也是一个很重要的一个方面:
可以通过:
stmt1 = this._conn.prepareStatement(sql,
ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
stmt1.setFetchDirection(ResultSet.FETCH_FORWARD);
应该这种方式来做到你说的这一点!
Oracle JDBC 驱动, 会使用大量的内存, 如果控制不好很容易导致Java出现Out of memory错误.
耗内存有多方面的原因: 主要包括四个方面: (下面的讨论全部基于我自己的环境: ojdbc6.jar, version是11.1.0.7.0-Production, Oracle 10G, Java6(JDBC4) )
详见我自己的blog文章:
[原] Oracel JDBC 内存 问题
1 楼
freish
2011-06-24
目前还没碰到因为oracle jdbc驱动问题导致OutOfMemory的
2 楼
smithfox
2011-06-24
freish 写道
目前还没碰到因为oracle jdbc驱动问题导致OutOfMemory的
常见的 business web application应该不会有OOM问题, 因为所查询的数据量本身就比较小, 这种appliaction更多的是强调 table relationship, 业务 rule, and filter之类的.
但还有一部分程序是做后台的大数据的分析或是同步, 尤其是在分布式环境的维护.
3 楼
grave
2011-06-25
smithfox 写道
freish 写道
目前还没碰到因为oracle jdbc驱动问题导致OutOfMemory的
常见的 business web application应该不会有OOM问题, 因为所查询的数据量本身就比较小, 这种appliaction更多的是强调 table relationship, 业务 rule, and filter之类的.
但还有一部分程序是做后台的大数据的分析或是同步, 尤其是在分布式环境的维护.
直接写stored procedure了吧..难道你还全取出来用完再塞回去么?而且你觉得换个数据库和jdbc驱动就不会出现这个问题么.
4 楼
smithfox
2011-06-25
grave 写道
smithfox 写道
freish 写道
目前还没碰到因为oracle jdbc驱动问题导致OutOfMemory的
常见的 business web application应该不会有OOM问题, 因为所查询的数据量本身就比较小, 这种appliaction更多的是强调 table relationship, 业务 rule, and filter之类的.
但还有一部分程序是做后台的大数据的分析或是同步, 尤其是在分布式环境的维护.
直接写stored procedure了吧..难道你还全取出来用完再塞回去么?而且你觉得换个数据库和jdbc驱动就不会出现这个问题么.
用stored procedure解决业务计算? 每个人所处的Application和Business都不一样.
如果你没有遇到过 scale out 问题, 没有Global Level Database问题.
你就不会理解这些问题:
for example:
user信息是存在不同城市的 物理 Database Instance的, 你根本就无法在DataBase level处理一个新的用户是否已经在系统了.
这些都是 sale out的基本问题!
扯远了! 只想说: 如果你没遇到这个问题, 表示你所处Application和Business和我的不一样.或是你的解决方案不用 Oracle Database and Java
5 楼
joachimz
2011-06-27
印象与ResultSet的类型相关,如果是scrollable的,Oracle会把所有结果集都放在内存到OOM,否则应该没有OOM问题。
6 楼
smithfox
2011-06-27
joachimz 写道
印象与ResultSet的类型相关,如果是scrollable的,Oracle会把所有结果集都放在内存到OOM,否则应该没有OOM问题。
恩, 谢谢提醒, 这个也是一个很重要的一个方面:
可以通过:
stmt1 = this._conn.prepareStatement(sql,
ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
stmt1.setFetchDirection(ResultSet.FETCH_FORWARD);
应该这种方式来做到你说的这一点!