【发布时间】:2011-01-09 10:43:55
【问题描述】:
我注意到以下行为。
我有一个大约 3MB 的文件,其中包含数千行。 在行中,我拆分并创建了准备好的语句(大约 250 000 条语句)。
我做的是:
preparedStatement
addBatch
do for every 200 rows {
executeBatch
clearBatch().
}
最后
commit()
内存使用量将增加到 70mb 左右,而不会出现内存不足错误。是否有可能降低内存使用量?并具有事务行为(如果一个失败,所有失败。)。
我可以通过使用executeBatch 和clearBatch 进行提交来降低内存...但这会导致总集的部分插入。
【问题讨论】:
-
这可能很大程度上取决于 JDBC 驱动程序的质量——您使用的是哪一个?
-
我已从 200 行更改为 10000 行,现在执行时间为 37 秒。看起来使用了相同的尺寸。我正在使用 H2 的 org.h2.jdbcx.JdbcConnectionPool 数据存储为文件..不在内存中。我正在尝试构建一个没有像 oracle、mysql 等数据库服务器的本地应用程序。
-
您确定高内存使用与数据库处理有关,而不是与导入的文件I/O有关吗?
-
不,你的权利,最大的内存使用是由于h2数据库......我重写了我的junit以使用oracle,它一直需要大约17/18MB(从开始到结束)。我只是想知道 2MB 和 250K 插入的文件是 17 mb 还是 18 mb 大。我认为使用 h2 减少内存量会很困难,有人建议使用类似的内存使用量更少的东西吗?
标签: java oracle memory jdbc batch-processing