查询 Firebird 数据库导致 Java 堆空间错误

我在使用 Firebird 时遇到了一些麻烦。一些 SQL 查询收到错误“Java 堆空间”。

我已经修改了所有查询,似乎是正确的。但是,在做了一些测试之后,我注意到只有当 SQL 查询没有返回行数限制时才会发生错误。如果我使用 运行查询SELECT  FIRST(10) field1, field2 from table,它会从 db 返回结果,如果没有FIRST(),则会发生错误。

原来安装 Firebird 的服务器内存有限,所以我只是在我的个人电脑上安装了 Firebird,恢复了备份并测试了它。我当前的计算机有很多内存和 CPU 来运行这个简单的查询,并且发生了同样的问题。

我的 Firebird 版本是 2.5。我在 Firebird 官方文档中搜索过,但没有找到任何有用的信息。任何人都知道可能导致此错误的原因是什么?

以下是测试期间的错误打印和我的计算机任务管理器。

http://img1.mukewang.com/6132236e000184de19080733.jpg

http://img2.mukewang.com/613223750001602507790700.jpg

FFIVE
浏览 135回答 1
1回答

holdtom

此问题与 Firebird 服务器本身的内存使用无关。您的查询工具是一个 Java 应用程序(它看起来像 DBeaver,但也可能是一个不同的基于 Eclipse 的应用程序),检索所有行会消耗太多内存。当 Java 无法分配足够的内存时,这会导致OutOfMemoryError带有消息“Java 堆空间”您要么需要将该应用程序配置为使用更多内存,要么确定它是否可以检索页面中的行而不是获取所有行。在自动提交模式下执行查询时,Jaybird(Firebird JDBC 驱动程序)本身将检索所有行,因此您可能需要在事务中执行它。或者,正如您已经发现的:不要查询所有行。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java