PostgreSQL + JDBC:第一次查询解析太慢

PostgreSQL + JDBC:第一次查询解析太慢

我使用 OS X 中的 Aqua Data Studio 在 PostgreSQL 服务器中进行查询,但是当天的第一个查询运行得太慢了。

这与 SQL 无关,简单的 SQLSELECT current_timestamp将在大约 5 秒内解析并执行,任何后续查询将花费近 30 毫秒。如果我关闭应用程序,重新打开并重试,则不会发生这种情况,只有在重新启动机器时才会发生。

如果我使用 PgAdmin,它从第一个查询开始就运行良好。在 Aqua 中,很明显,这不是执行时间,而是解析时间导致了这种情况。

现在我们有一个持续集成服务器,它在每次提交时都会运行大量测试,但在当天的第一次构建时都会失败,并且直到我们进行第二次提交(或进行强制构建)它才会失败。这台机器是 Linux 的,构建是一个使用 JDBC 的 Java 应用程序,这让我放弃了操作系统问题,而更多地考虑 PostgreSQL + JDBC 问题。

我正在运行的主服务器:

PostgreSQL 8.4.4 on x86_64-unknown-linux-gnu, compiled by GCC gcc (Debian 4.3.2-1.1) 4.3.2, 64-bit

但它发生在多个服务器和版本上:

PostgreSQL 8.4.1 on x86_64-unknown-linux-gnu, compiled by GCC gcc (Debian 4.3.2-1.1) 4.3.2, 64-bit

PostgreSQL 9.1alpha3 on x86_64-unknown-linux-gnu, compiled by GCC gcc (Debian 4.3.2-1.1) 4.3.2, 64-bit

如果我在任何服务器上执行第一个查询,那么在任何服务器上执行任何后续查询都可以。

有人遇到过这种情况吗?我该如何找出导致这种情况的原因?

答案1

这看起来很像您的数据库将在夜间或系统启动后其他进程需要大量内存时被分页。

我认为向数据库服务器添加更多内存是有意义的。另一个选择是在 CI 服务器运行测试之前(例如在某个预构建阶段)从脚本发出 select current_timestamp 上方的命令,以便将数据库分页。该脚本将调用 psql 命令行实用程序来发出 select。

相关内容