2015-09-11 14 views
0

SQLDB Bluemix Service的Premium Plan支持DB2 High Availability。但是,由服務憑證提供的默認JDBC URL使用比我想要使用的更多的forigiving超時。這是默認的JDBC URL的一個例子:通過JDBC使用SQLDB HA Premium Bluemix Service時,如何減少連接和讀取超時?

jdbc:db2://1.1.1.1:50001/DBName:clientRerouteAlternateServerName=2.2.2.2;clientRerouteAlternatePortNumber=50001;sslConnection=true; 

從各種實驗,它看起來像默認的超時是:

  • 初始連接超時:5分鐘
  • 套接字讀取超時:無論是操作系統的默認值。我讀過它可以超過一個小時。

在主服務器突然不可用的故障情況下,現有連接將保持「打開」狀態,直到達到套接字讀取超時爲止。這可能會使該連接上的請求顯示「掛起」。此外,由於默認的連接超時時間爲2分鐘,因此任何嘗試建立新連接都需要2分鐘或更長時間。

我想使用更小的超時時間來確保更高程度的應用程序可用性。我試着自己調整各種JDBC URL參數,但我設法幾次打破故障轉移。所以,我應該問問專家:

爲了控制初始連接超時和套接字讀取超時(並且不將故障轉移到輔助服務器),應該設置或更改什麼DB2 JDBC超時相關參數? ?

回答

2

有跡象表明,你要設置幾個重要的屬性:

  • loginTimeout設置了打開插座爲每個服務器爲新的JDBC連接對象的超時值。
  • blockingReadConnectionTimeout設置在執行請求時建立初始連接後從套接字中讀取的超時時間。
  • commandTimeout限制了任何SQL請求可以執行的最大時間量。

所以,你的JDBC URL會是這個樣子:

jdbc:db2://1.1.1.1:50001/DBName:clientRerouteAlternateServerName=2.2.2.2;clientRerouteAlternatePortNumber=50001;sslConnection=true;loginTimeout=10;blockingReadConnectionTimeout=10;commandTimeout=30; 

前兩個特性是重要的,你有沒有網絡連接到服務器或情況,如果你失去網絡連接到服務器分別處於請求的中間。

這是很好的做法,設置commandTimeout,但這樣做也包括你在一個邊緣的情況下:如果你失去連接的請求的中間服務器,達到blockingReadConnectionTimeout後,連接將試圖打開新的套接字連接到服務器。不幸的是,沒有屬性可以設置打開新插槽的超時時間,因此使用默認的操作系統超時(通常在Linux中大約2分鐘),除非您設置了commandTimeout。在這種情況下,它將使用剩餘時間作爲打開新套接字的超時時間。

如果您真的想讓自己的手變髒,您可以觀察所有這些行爲,並在驅動程序中使用enabling trace logging各種超時,並在使用驅動程序時在不同點模擬網絡故障(阻止網絡流量)。對於所有的JDBC屬性

文檔可以發現here

[1]這主要是由於這樣的事實,在故障期間這一點上,駕駛員的Connection對象未關閉。

0

請參閱此鏈接

https://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.1.0/com.ibm.db2.udb.apdv.java.doc/doc/rjvdsprp.htm

它具有所有屬性的說明,並幫助您瞭解

blockingReadConnectionTimeout 的時間量(秒)的連接插孔讀超時之前。此屬性僅適用於IBM DB2 JDBC驅動程序和SQLJ類型4連接,並影響連接成功建立後發送到數據庫服務器的所有請求。默認值爲0.值爲0意味着沒有超時。

+0

在答案中給出一些細節 – Blip