java - 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 个。
解决方案
推荐阅读
- android-studio - 通过选定的应用程序过滤 logcat *并*在 Android Studio 中添加自定义过滤器
- java - Reactor - 如何避免递归?
- python-3.x - yaml 转储没有引号的 python 字典
- python - 使用字典的值过滤数据框
- python - 如何从我从 Python 中的 GitHub 职位开放 API 以 .json 格式获得的列表中确定给定技术的职位数量?
- r - 如何在 r 中随机保留一个重复的行(不是第一个重复的行)
- spring-boot - Spring Boot API Gateway 无法解析名称
- node.js - 无法使用 node.js 获取请求超时响应
- sql - 如何将时间列添加到 Vertica 中的时间戳列?(或另一个分贝)
- kotlin - 在 Kotlin 中添加条件的 for 循环的优雅方式是什么?