Nic*_*ick 7 java database postgresql jdbc
我在 Spring JDBC 上遇到了一个有趣的问题。我有一个简单的 SELECT 查询,它只是通过其标识符从数据库中选择一行。当我通过数据库上的 PgAdmin raw 运行此查询时,它会在大约 500 毫秒内返回。当我通过我的 Java 堆栈运行它时,它需要整整 20秒,并且在后续运行中并没有变得更快。
这是我代码挂起的最后一层:
return jdbcTemplate.queryForObject(QUERY_SINGLE_COMPONENT, queryArguments, new ComponentRowMapper());
Run Code Online (Sandbox Code Playgroud)
(我的 jdbcTemplate 是一个 NamedParameterJdbcTemplate)。在执行过程中,我在我的代码上运行了 VisualVM:
PostgreSQL 驱动程序 readMore 基本上占用了所有时间。我使用的是 PostgreSQL 驱动程序 42.0.0,但我尝试更新到最新版本,但没有帮助。
同一个查询中的其他 ID 返回得很好,我通过同一个代码库进行的其他查询工作得很好。它让我疯狂了好几天,如果有任何见解,我将不胜感激!
编辑:我已经设法将问题与我们的架构搜索路径隔离开来。我们使用测试模式来暂存数据库更改。当测试在模式搜索路径中时它很慢,当测试被删除时它很快。在这两种情况下,它仍然比我在 PgAdmin 中运行它时慢一个数量级。