我们的应用程序一直在使用基于ping的方法,在执行每个查询之前.激活验证查询以检查连接是否有效. DataSource配置如下:
<min-pool-size>10</min-pool-size>
<max-pool-size>250</max-pool-size>
<blocking-timeout-millis>90000</blocking-timeout-millis>
<track-statements/>
<new-connection-sql>SELECT 1</new-connection-sql>
<check-valid-connection-sql>SELECT 2</check-valid-connection-sql>.
现在,在这种方法中,我们可以看到有很多次“select 1”sql被执行并且不必要地增加了操作的总成本.
当我搜索可能的替代方案是在后台进行连接检查.
数据源配置如下:
<min-pool-size>10</min-pool-size>
<max-pool-size>250</max-pool-size>
<blocking-timeout-millis>90000</blocking-timeout-millis>
<track-statements/>
<new-connection-sql>SELECT 1</new-connection-sql>
<check-valid-connection-sql>SELECT 2</check-valid-connection-sql>
<validate-on-match>false</validate-on-match>
<background-validation>true</background-validation>
<background-validation-millis>600000</background-validation-millis>
我的问题是这是推荐的吗?如果我们使用上述方法,是否有任何负面影响?
最佳答案 这不是默认行为,但是当您经常查询时,这是一个非常好的选择,就像您的情况一样.你是对的,这将显着改善你的查询的延迟.
唯一的缺点是如果验证期background-validation-millis之间的连接出现错误.在这种情况下,您的查询将失败,因此,请查看您的错误处理代码.我认为支付你可能获得的性能提升是一个非常便宜的代价.
希望这可以帮助.