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

Why the H2 database file size growing more than the data size

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

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

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 的数据。

任何人都可以建议我一些解决方法或修复以减小我的数据库大小

因为当你从数据库中删除一些记录时,数据文件并没有减少。这是由于性能原因。因此 h2 将替换文件中的字节块或附加新字节块,但不会删除任何内容,因为它需要重写整个文件。

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

通常文件大小远大于数据大小,因为其中保存了多个版本的数据以适应并发事务处理。

要减小文件大小,请使用“shutdown defrag”或“shutdown compact”(它们现在相同), 假设您使用的是最新版本。

这是将文件大小减小到数据大小(大致)的唯一方法。 如果是 1.4.197 或更早版本,请升级。

你的行为 3), 4), 5) 对我来说没有任何意义。如果有的话,我会 RETENTION_TIME=0。