当前位置: 首页 > 知识库问答 >
问题:

为什么H2数据库文件大小的增长超过了数据大小

袁鹤轩
2023-03-14

我有一个h2数据库文件,文件大小已经增长到5GB。我删除了一些数据以缩小文件的大小。但即使从数据库中删除了一半记录,文件大小仍然保持不变。

我已经尝试了以下所有选项来减少数据库大小,但没有一个对我有用。

1. Executed shutdown compact (after closing all the connection).
2. Executed shutdown defrag.
3. Executed checkpoint.
4. Used the property MV_STORE=FALSE along with the database url.
5. Used the property RETENTION_TIME=30000 along with the database url.

我的连接字符串如下所示:

"jdbc:h2:" + <db file path>;MVCC=TRUE;DEFAULT_LOCK_TIMEOUT=10000;COMPRESS=TRUE;

注:

  1. 我们正在结清我们已经开始的交易
  2. 文件中没有5GB的数据

有人能给我建议一些解决方法或修复方法来减少我的数据库大小吗

共有1个答案

裴畅
2023-03-14

因为从数据库中删除一些记录时,数据文件不会减少。这是由于性能原因。所以h2要么替换文件中的字节块,要么追加新的字节块,但不会删除任何内容,因为它需要重写整个文件。

要么你没有像你认为的那样压缩,要么你没有删除有意义的数据。

 类似资料:
  • 我有大约500MB的H2数据库。 H2的版本是1.2.147。 数据库的存储引擎是PageStore。 JDBC URL如下所示。 jdbc:h2:file://C:/h2/client;如果存在=真;MVCC=真;数据库\u事件\u侦听器。H2DBMonitor';AUTO_SERVER=TRUE;对数=2 我做了一个版本的H2 1.4.192没有改变数据库的存储引擎。 当我的客户使用数据库时,

  • 我最近在spark工作,遇到了一些我仍然无法解决的问题。 假设我有一个100GB的数据集,集群的ram大小是16GB。 现在,我知道在简单地读取文件并将其保存在HDFS中的情况下,Spark将为每个分区执行它。当我对100GB数据执行排序或聚合转换时会发生什么?它将如何在内存中处理100GB,因为我们需要整个数据来进行排序? 我已经通过下面的链接,但这只告诉我们火花在持久化的情况下做什么,我正在寻

  • 我搜索了Firebase:只读&非实时模式,为提高浏览器性能而激活,以及其他一些相关站点。我找不到实时数据库的最大文件限制大小。 我知道,这是非常明显的,我们放的JSON文件越小,我们就越实时。请不要评论说“使用小型的实时数据库”。我想知道实时数据库的最大文件大小。

  • 问题内容: 我注意到秋千上的容器之间有奇怪的行为。 为了举例说明该测试,我创建了一个JFrame和一个JPanel,并将面板设置为 contentPane。我将首选和最大的JPanel大小定义为400,300。所有 这些都可以在下面的示例中看到: The result is: 令我惊讶的是,终端的输出为: 面板尺寸:[400,300] 框架尺寸:[416,338] 我不明白为什么框架会增加这个额外

  • 问题内容: 我的redis实例似乎正在变得非常大,我想找出我那里的多个数据库中的哪个消耗了多少内存。Redis的命令仅向我显示了每个数据库的总大小和密钥数,这并没有给我带来太多的了解…因此,在监视Redis服务器时为我提供更多信息的任何工具/想法都将受到赞赏。 Redis文档没有显示任何可以返回某些键消耗的内存的命令,因此我想如果有错误代码会为Redis写很多“废纸t”,这可能很难找到… 问题答案

  • 问题内容: 我有一个带有1.6Gb日志文件的大约13Gb的SQL Server数据库。但是,当我备份它时,它将创建一个50Gb .bak文件!这是为什么? 我在这里阅读了一些有关事务日志的评论,但是我的数据库在笔记本电脑上运行,并且在备份期间没有数据库活动。(仅需5分钟)。 我的备份类型为“完全”,我的恢复类型为“完全”,并且正在执行“仅复制”备份。有任何想法吗?非常感激! 我正在使用SQL 20