为什么我的H2数据库在磁盘上比它应该大7倍?

时间:2018-04-19 20:39:03

标签: h2

我的H2数据库已经膨胀到几千兆字节,导致各种操作问题。数据库大小似乎不对。所以我只拿了一小块,只有一张桌子,试图弄清楚发生了什么。

我将此表带入测试环境:

enter image description here

根据我的计算,每行最多可添加80个字节。

该表有280,000行。

对于此测试,删除了所有索引。

该表应占据约

80 bytes per row * 280,000 rows = 22.4 MB on disk.

然而,它实际上占用 157 MB

我希望在这里和那里看到一些开销,但是为什么这个数据库比合理估计的数据量大7倍?

更新

CALL DISK_SPACE_USED的输出 enter image description here

2 个答案:

答案 0 :(得分:-1)

总是需要考虑索引等。

你可以尝试:

CALL DISK_SPACE_USED('my_table');

此外,我还建议您运行SHUTDOWN DEFRAG并再次计算尺寸。

答案 1 :(得分:-1)

在数据库创建上设置MV_STORE=FALSE可以解决问题。整个数据库(不是示例中的测试切片)现在大约小10倍。

<强>更新

我最近不得不重新审视这个话题,不得不与MySQL进行比较。在我的测试数据集中,当MV_STORE = FALSE时,H2数据库占用360MB的磁盘空间,而具有默认配置的MySQL 5.7 InnoDB上的相同数据占用432MB。 YMMV。