删除LOB不会降低Hibernate H2数据库大小
我正在使用H2 1.4.196。 我有一个保存LOB的Payload表。 我触发了通过Java程序删除表中的实体,并通过H2 Console验证表现在是空的。
但是,db.mv文件的大小不会减小。 重复创建和删除LOB会将表留空,但db.mv会继续无限增长,并且查看该文件仍然会看到LOB内容。 只有在DROP TABLE Payload时,db.mv文件的大小实际上会减少。
我有一个理论认为它可能是一个开放的事务,但SELECT * FROM INFORMATION_SCHEMA.SESSIONS
只显示会话sql语句创建的会话。
什么可能导致这种无法真正删除LOB?
更新:我找到了https://github.com/h2database/h2database/issues/681,并且从源代码构建包括11月29日提交导致DB文件成功减少。 但是,删除大约需要20秒才能传播并反映文件大小,并且在此时间范围内的插入导致删除从未完成。
多年来一直存在类似问题:https://groups.google.com/forum/#!topic/h2-database/CGXOfSx_Vq4
根据http://h2database.com/html/features.html#compacting,“自动重新使用数据库文件中的空白空间。 当关闭数据库时,默认情况下数据库会自动压缩长达200毫秒。“我们的LOB没有真正看到过这种情况,因为数据库每增加一个周期的任务就会增长一次。
它建议使用手动SHUTDOWN COMPACT
作为解决方案来缩小更多
https://groups.google.com/forum/#!topic/h2-database/eXBzpF4WnNk:“请注意,如果删除数据(但保持数据库处于打开状态),数据库文件不会缩小。 但是,文件中的空白空间会自动重新使用。 如果关闭数据库(关闭所有连接或运行“shutdown”),数据库文件只会缩小。“
链接地址: http://www.djcxy.com/p/41071.html