使用hsqldb时,缓存的表不会缓存,而是在内存中

时间:2011-09-12 14:11:20

标签: hsqldb caching

我正在尝试hsqldb 2.2.5版的缓存表功能。

只需将JDBC批量插入到一个表中,奇怪的是if  我单独运行我的测试,虽然我使用 创建缓存表 , 但它仍在使用内存模式,因为在 100,0000条记录 OOM 之后。

但如果我在此测试用例之前运行其他测试或使用jdbc:hsqldb:mem:HSQLDB;hsqldb.default_table_type=cached ,它将使用缓存表。

无论如何,我不想使用缓存作为默认值。

缓存的表性能如下所示 在2600000条记录之后 ,性能下降了很多。 在3600000条记录之后 ,它变得非常慢

也许某些索引占用内存完全使JVM变慢。 不是因为db本身

两个子问题

1)强制缓存表的任何其他配置是否使用缓存模式?

2)任何db配置都有助于提高缓存表的性能吗?

(使用JDK1.6 -Xmx1024m)

1 个答案:

答案 0 :(得分:6)

您报告的URL是mem:(内存中的所有内容 - 无持久性)数据库。在此设置中,将忽略CACHED表的任何引用或设置,并将数据存储在内存中。

CACHED表功能可用file:(持久存储到磁盘)数据库。这些数据库还支持持久性MEMORY表(所有数据都存储在内存中)。 CACHED和MEMORY表的数据都存储在file:数据库的磁盘上。

关于CACHED的执行情况,最近使用的行缓存在内存中,当缓存变满时,更改将保存到磁盘。

数据库引擎使用java.nio方法访问磁盘上大于16MB且低于特定限制的数据库。要提高性能,可以使用hsqldb.nio_max_size属性或等效的SQL语句来增加限制。

通常,磁盘在随机访问模式下速度很慢(每秒最多100次访问)。使用缓存,nio和其他策略可以减少有效访问时间,但只是在某种程度上。

另请注意,您可以在批量插入期间关闭数据记录,然后再次将其打开以进行正常的数据库操作。

本指南的这一章涵盖了这些问题和设置。

http://hsqldb.org/doc/2.0/guide/deployment-chapt.html