【发布时间】:2018-06-12 15:17:50
【问题描述】:
我正在使用 H2 1.4.196。我有一个包含 LOB 的有效负载表。我通过 Java 程序触发删除表中的实体,并通过 H2 控制台验证表现在为空。
但是,db.mv 文件的大小并没有减小。 LOB 的重复创建和删除使表为空,但 db.mv 继续无限增长,查看文件我仍然可以看到 LOB 内容。只有在 DROP TABLE Payload 时,db.mv 文件的大小才会真正减小。
我有一个理论认为它可能是一个开放的事务,但SELECT * FROM INFORMATION_SCHEMA.SESSIONS 只显示了由会话 sql 语句创建的会话。
什么可能导致无法真正删除 LOB?
【问题讨论】:
-
我在这里根据直觉推测,但缩小和增加文件大小是一项昂贵的 I/O 操作。那些老式的旋转硬盘驱动器很慢。因此,很多数据库会释放表中的空间,但实际上并没有释放空的文件空间。看到这个stackoverflow.com/questions/11784497/h2-db-file-keeps-growing 我怀疑 H2 只是将该行标记为已删除而不删除数据以获得最佳性能。