java – Jboss后台验证

我们的应用程序一直在使用基于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之间的连接出现错误.在这种情况下,您的查询将失败,因此,请查看您的错误处理代码.我认为支付你可能获得的性能提升是一个非常便宜的代价.

希望这可以帮助.

点赞