[alibaba/druid]数据源只会执行历史版本的SQL,不执行最新的SQL

2025-11-10 979 views
2

Druid版本: 1.1.22 druid配置如下: initialSize:50 minIdle:50 maxActive:500 maxWait:20000 queryTimeout:30 timeBetweenEvictionRunsMillis:120000 minEvictableIdleTimeMillis:240000 maxEvictableIdleTimeMillis:1200000 validationQuery:SELECT 'x' FROM DUAL poolPreparedStatements:true maxOpenPreparedStatements:50 removeAbandoned:true removeAbandonedTimeout:300 logAbandoned:true testWhileIdle:true testOnBorrow:true testOnReturn:false timeBetweenConnectErrorMillis:300000 filters:stat,slf4j,wall connectionProperties:druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

Oracle版本: 11.2.0

问题: Oracle里有个SQL 视图,然后查询视图,查询出的结果不是想要的结果,然后修改视图,通过druid数据源查询出的结果也不是想要的,druid数据源查询出的结果还是历史某个SQL版本的结果,中间视图修改多次了,查询出的结果始终是历史中的某个版本。但通过PLSQL查询,查出的结果是最新的。 然后把druid中的那个数据源销毁,重新创建数据源就能查询出最新的SQL结果了。然后继续修改视图的SQL,通过新的数据源查出来也都是最新的视图SQL的结果。

怀疑 :是不是 poolPreparedStatements 设置为true 引起的,视图的执行语句缓存还是缓存在druid里?是不是poolPreparedStatements设置成false,maxOpenPreparedStatements设置为0就能解决此问题

回答

1

很高兴能看到你的 issues,我也遇到相同的情况(查询表); 我原先的配置是 poolPreparedStatements=true,maxOpenPreparedStatements=10 出现了sql被缓存的情况,导致业务不正常; 按照你的提示更新了配置 poolPreparedStatements=false,maxOpenPreparedStatements=-1 问题得到解决

0

我在1.2.4版本上也遇到了这个问题,设置PS之后还是有问题,最后只好放弃使用。

4

我在1.2.4版本上也遇到了这个问题,设置PS之后还是有问题,最后只好放弃使用。

你的maxOpenPreparedStatements设置为-1了吗?

0

我在1.2.4版本上也遇到了这个问题,设置PS之后还是有问题,最后只好放弃使用。

你的maxOpenPreparedStatements设置为-1了吗?

设置了,但奇怪的是查询时还是只能查到连接创建时的数据,即使使用之前从未发送的SQL查查到的也是连接创建时的历史数据。 但使用dbeaver及其他工具查都是正常的。 甚至使用druid查询同一个库的其他表都正常。只有基于某个dblink的表创建的视图有这种情况,另外一个dblink的库的表创建的视图查询结果也是正常的。