4

我们的应用程序一直在使用基于 ping 的方法,其中在执行每个查询之前。触发验证查询以检查连接是否处于活动状态。相同的数据源配置如下:

  <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>

我的问题是这是推荐的吗?如果我们使用上述方法是否有任何负面影响?

4

1 回答 1

2

这不是默认行为,但当您有非常频繁的查询时,它是一个非常好的选择,就像您的情况一样。你是对的,这将显着改善查询的延迟。

唯一的缺点是如果验证期之间的连接出现问题background-validation-millis。在这种情况下,您的查询将失败,因此,请检查您的错误处理代码。我认为为可能获得的性能提升付出相当便宜的代价。

希望这可以帮助。

于 2013-07-08T08:55:34.077 回答