2013-07-08 30 views
3

我們的應用程序一直使用基於ping的方法,在每個查詢執行之前。驗證查詢被觸發以檢查連接是否存在。對於同一數據源配置爲如下:Jboss後臺驗證

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

現在,在這個方法中,我們可以看到,有噸的時候,「選擇1」得到執行的SQL,並unnecassarily添加高達用於操作的總成本。

當我搜索可能的替代方案是在後臺進行連接檢查。對於同一

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> 
<validate-on-match>false</validate-on-match> 
<background-validation>true</background-validation> 
<background-validation-millis>600000</background-validation-millis> 

我的問題是有,如果我們上面的方法中使用的任何底片?

回答

1

這不是默認行爲,但當你有非常頻繁的查詢時,這是一個非常好的選擇,就像你的情況一樣。你是對的,這將顯着改善你的查詢的延遲。

唯一的缺點是如果驗證週期background-validation-millis之間的連接出現問題。在這種情況下,您的查詢將失敗,因此請查看您的錯誤處理代碼。我認爲這是一個相當便宜的價格來支付您可能獲得的性能提升。

希望這會有所幫助。

+0

感謝@Apinto確認我認爲對於負載密集型應用程序來說應該是一件好事。我最近發佈了這些更改以供測試人員測試它們。他們回過頭來說,性能已經下降..我們有一些方法調用和記錄的東西來衡量這些方法的性能,而負載測試......但我不認爲這種變化反正會降低系統......你爲什麼認爲......?對我來說,它似乎可能是網絡或其他事情的一些問題 – Rips