首页 > 解决方案 > H2 数据库挂在特定查询上

问题描述

我们有一个将数据存储在本地 H2 数据库(文件模式)中的应用程序。除了在应用程序关闭时执行的单个查询外,一切正常。查询被发送到 H2,但从不返回(不抛出异常)。

据我所知,这只出现在单个工作站上(功能仍在测试中而不是在生产中)。

在我自己的工作站上使用该工作站的数据库时,应用程序会停在那里等待查询返回。因此,对于这个特定的数据库,它是可重现的。

当在外部工具中打开数据库(如果重要的话是DbVisualizer Proexplain analyze <query> )并发出相同的查询(特别是我以前不修改数据库中的数据)时,查询也会永远运行。查询如下所示:

DELETE TOP(1000) FROM my_schema.SOMETABLE ST WHERE ST.someDate < '2019-05-23'

该问题与显示的日期没有直接关系,因为它昨天发生的相同(日期为2019-05-22)。

奇怪的是,当我停止查询执行并修改查询将按预期工作的日期时(也explain analyze没有修改数据)。如果我切换回原始日期,它也可以工作。

在那个“技巧”之后我启动应用程序时,有问题的查询就像一个魅力。所以我想它一定与特定数据库的实际状态有关。

我的问题是:如何找出数据库文件有什么问题?

我已经尝试过进行这种“健康检查”,但这并没有显示任何问题。

旁注:这里的“永远运行”意味着我在等待大约 20 分钟后终止了应用程序进程,但我想这段时间应该足以删除该特定表中 18 个条目中的 16 个。

标签: javajdbch2

解决方案


推荐阅读