导航:首页 > 编程大全 > 数据库连接溢出

数据库连接溢出

发布时间:2023-12-12 17:45:55

『壹』 你好,java数据库添加大量数据时内存溢出 在不改变内存的情况下如何解决 你当时是怎么解决的

比如想将一个1000W数据的数据库表,导出到文件;此时,你要么进行分页,oracle当然用三层包装即可,mysql用limit,不过分页每次都会新的查询,而且随着翻页,会越来越慢,其实我们想拿到一个句柄,然后向下游动,编译一部分数据(如10000行)将写文件一次(写文件细节不多说了,这个是最基本的),需要注意的时候每次buffer的数据,在用outputstream写入的时候,最好flush一下,将缓冲区清空下;接下来,执行一个没有where条件的SQL,会不会将内存撑爆?是的,这个问题我们值得去思考下,通过API发现可以对SQL进行一些操作,例如,通过:PreparedStatement statement = connection.prepareStatement(sql),这是默认得到的预编译,还可以通过设置:PreparedStatement statement = connection.prepareStatement(sql , ResultSet.TYPE_FORWARD_ONLY , ResultSet.CONCUR_READ_ONLY);
来设置游标的方式,以至于游标不是将数据直接cache到本地内存,然后通过设置statement.setFetchSize(200);设置游标每次遍历的大小;OK,这个其实我用过,oracle用了和没用没区别,因为oracle的jdbc API默认就是不会将数据cache到java的内存中的,而mysql里头设置根本无效,我上面说了一堆废话,呵呵,我只是想说,java提供的标准API也未必有效,很多时候要看厂商的实现机制,还有这个设置是很多网上说有效的,但是这纯属抄袭;对于oracle上面说了不用关心,他本身就不是cache到内存,所以java内存不会导致什么问题,如果是mysql,首先必须使用5以上的版本,然后在连接参数上加上useCursorFetch=true这个参数,至于游标大小可以通过连接参数上加上:defaultFetchSize=1000来设置,例如:
jdbc:mysql://xxx.xxx.xxx.xxx:3306/abc?zeroDateTimeBehavior=convertToNull&useCursorFetch=true&defaultFetchSize=1000
上次被这个问题纠结了很久(mysql的数据老导致程序内存膨胀,并行2个直接系统就宕了),还去看了很多源码才发现奇迹竟然在这里,最后经过mysql文档的确认,然后进行测试,并行多个,而且数据量都是500W以上的,都不会导致内存膨胀,GC一切正常,这个问题终于完结了。

『贰』 内存溢出的解决方法

内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存。
内存中加载的数据量过于庞大,如一次从数据库取出过多数据;集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;代码中存在死循环或循环产生过多重复的对象实体;使用的第三方软件中的BUG;启动参数内存值设定的过小;
检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
检查代码中是否有死循环或递归调用。

『叁』 关于ACCESS数据库插入或更新数据的溢出问题

原系统在SQLSERVER数据库下无任何问题,转换成ACCESS数据库后,操作其中一个表Client,这个表有3W多条记录,语句如下:
public DataSet getClient(string SearchStr)
{
try
{
string SqlStr="Select * from Client where ClientName like '%"+SearchStr+"%'";
OleDbDataAdapter OleDbCommand=new OleDbDataAdapter(SqlStr,Conn());
DataSet TempData=new DataSet();
OleDbCommand.Fill(TempData,"Client");
return TempData;
}
catch(Exception ex)
{
throw ex;
}
}

阅读全文

与数据库连接溢出相关的资料

热点内容
db2数据库windows 浏览:670
文件信息管理术语英 浏览:119
编程前端笔试过不了怎么办 浏览:293
会计云课堂电脑版app怎么下载 浏览:741
win10关闭侧滑 浏览:333
焊接电路板工具有哪些 浏览:867
文件名通符有什么用 浏览:954
纯真ip数据库怎么用 浏览:376
计算机如何进行简单编程 浏览:944
金山文档怎么导出excel文件图片 浏览:772
武汉微信群大全 浏览:592
手机数据存储是什么意思 浏览:491
苹果6系列产品 浏览:121
恒生离职要签署什么文件 浏览:444
js里面使用php变量 浏览:917
ios9删除自带程序app 浏览:430
宝马x5大灯怎么编程 浏览:261
怎么在电脑连接路由器怎么设置密码 浏览:67
地球形成多少年精确数据 浏览:76
编程中的vs什么意思 浏览:37

友情链接