java-Xmx64m -Xms32m -Xmn32m -Xss16m TEST "wangt" "wangt""jdbc:oracle:thin:@(DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=orcl))(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))">a.txt
java-Xmx64m -Xms32m -Xmn32m -Xss16m TEST2 "wangt" "wangt""jdbc:oracle:thin:@(DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=orcl))(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))">c.txt
java-Xmx64m -Xms32m -Xmn32m -Xss16m TEST2 "postgres" "wangt""jdbc:postgresql://localhost:5432/wangt">b.txt
JDBC解析SQL语句后,为每个Statement(包括PreparedStatement和CallableStatement)分配了两个Buffer缓存数据,byte[]和char[]。字符类型的数据(CHAR,VARCHAR2,NCHAR, etc. )缓存在char[]中,其他类型的数据缓存在byte[]中。在SQL语句解析后,语句所查询的列的数据类型就已经确定了,JDBC会根据这些信息和FetchSize 一起计算出缓存的大小,并分配内存。所以如果不需要查询某张表的所以列时,使用SELECT* FROM XXX是一种浪费内存的行为,特别是表的列数多且数据量大的时候,很容易造成OOM,代码也很少有select*。
通过以上测试可知,fetchsize的设置影响到jvm内存消耗和查询的响应时间,设置fetchsize时要权衡两者。一般jdbc默认的fetchsize是10,这个值是比较小的,可以防查询时outof momory的问题,但是程序的响应时间会变长。字段多的表或者行数大的表需要一个小的fetchsize值来降低查询结果集的jvm内存消耗;但是,字段少或者行数据小的表需要一个大的fetchsize值来降低查询结果集的响应时间。要设置fetchsize,请在执行查询之前,对statement对象调用setFetchSize()。如果fetchsize为N,那么每次往返数据库能返回N行数据。
oracle迁移后,导出报表数据显示如下报错,因为oracle的fetchsize有默认值,所以可以导出,虽然比较慢。pg中默认值是0,全部写到内存中,服务器内存不足,提示OOM。设置fetchsize后程序可以和往常一样导出数据。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/130066.html
摘要:新晋技术专家下面是墨天轮部分新晋的技术专家。大家可以点击往期阅读墨天轮技术专家邀请函了解详情,申请成为我们的技术专家,加入专家团队,与我们一起创建一个开放互助的数据库技术社区。新关联公众号墨天轮是一个开放互助的数据库技术社区。 引言 近期我们在DBASK小程序增加了数据库 MongoDB、Redis、 Elasticsearch、DB2、Weblogic 等新的的专题栏目和一些新的技术...
摘要:前言在总结的第一篇中,我们已经总结了一些常用的相关的知识点了那么本篇主要总结关于视图序列事务的一些内容在数据库中,我们可以把各种的语句分为四大类数据操纵语言,,,数据定义语言,,,数据控制语言事务控制语言,,回滚点批量操作何为批量操作,就是 前言 在Oracle总结的第一篇中,我们已经总结了一些常用的SQL相关的知识点了...那么本篇主要总结关于Oralce视图、序列、事务的一些内容....
阅读 1249·2023-01-11 13:20
阅读 1557·2023-01-11 13:20
阅读 1011·2023-01-11 13:20
阅读 1680·2023-01-11 13:20
阅读 3971·2023-01-11 13:20
阅读 2518·2023-01-11 13:20
阅读 1310·2023-01-11 13:20
阅读 3485·2023-01-11 13:20