我正在尝试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)
答案 0 :(得分:6)
您报告的URL是mem:
(内存中的所有内容 - 无持久性)数据库。在此设置中,将忽略CACHED表的任何引用或设置,并将数据存储在内存中。
CACHED表功能可用file:
(持久存储到磁盘)数据库。这些数据库还支持持久性MEMORY表(所有数据都存储在内存中)。 CACHED和MEMORY表的数据都存储在file:
数据库的磁盘上。
关于CACHED的执行情况,最近使用的行缓存在内存中,当缓存变满时,更改将保存到磁盘。
数据库引擎使用java.nio
方法访问磁盘上大于16MB且低于特定限制的数据库。要提高性能,可以使用hsqldb.nio_max_size
属性或等效的SQL语句来增加限制。
通常,磁盘在随机访问模式下速度很慢(每秒最多100次访问)。使用缓存,nio和其他策略可以减少有效访问时间,但只是在某种程度上。
另请注意,您可以在批量插入期间关闭数据记录,然后再次将其打开以进行正常的数据库操作。
本指南的这一章涵盖了这些问题和设置。