gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:04:29 25 4
gpt4 key购买 nike

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

只是使用 JDBC 批量插入一张表,奇怪的是如果
我单独运行我的测试,虽然我使用了 创建缓存表 ,
但它仍然使用内存模式,因为在之后100,0000 条记录 , OOM .

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

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

缓存表性能如下所示
260万条记录后,性能下降很多。
在 3600000 条记录后,它变得很慢

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


两个子问题

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

2)任何数据库配置将有助于提高缓存表的性能?

(使用 JDK1.6 -Xmx1024m)

最佳答案

您报告的 URL 适用于 mem: (内存中的所有内容 - 没有持久性)数据库。在此设置中,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

关于hsqldb - 使用hsqldb时缓存的表不是缓存而是在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7389253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com