2011-10-11 60 views
0

我想知道是否有人可以解決以下問題:什麼是導致從Websphere內部對Oracle的JDBC調用的尖峯?

我們已經看到在AIX上的Websphere 6.1上運行基於Spring 2.5.6的Web服務中針對JDBC調用的峯值,以便調用到Oracle 64 -bit 10.2.0.5.0 JDBC驅動程序版本爲10.2.0.3.0。

我們使用單線程訪問數據庫,Web服務的平均響應時間爲16毫秒,但我們看到11秒鐘或更高的峯值(其中5分鐘內約有11,000次呼叫)。 Introscope告訴我們,大約一半的這些峯值是由「從雙選擇1」(Websphere連接池用於驗證連接)引起的。

在數據庫方面,我們追蹤了由Websphere連接池創建的會話,沒有一個沒有指出數據庫內的任何尖峯。

有什麼想法/建議可能導致這些尖峯?

編輯:

我們的連接池設置與20個連接和監控是示出只有一個連接被使用。

EDIT2:

我們已經沒什麼區別升級我們的Oracle JDBC驅動程序10.2.0.5。

回答

0

這個問題的答案最終與WebSphere或Oracle沒有關係,而是一個很好的舊式網絡配置問題,導致WebSphere服務器和Oracle RAC集羣之間的TCP重新傳輸超時。

爲了那個診斷到達我一直在尋找的netstat -p tcp輸出之前和之後的測試運行,發現

retransmit timeouts 

統計在增加。現在,重傳超時算法配置可以利用查看:

$ no -a 
... 
       rto_high = 64 
       rto_length = 13 
       rto_limit = 7 
        rto_low = 1 

這表明重發超時將採取秒1和64之間,並且將回退越來越多,這也解釋了1秒,所以我們已經看到尖峯,2秒,4秒,10秒和22秒,但沒有離開這些峯值(即沒有6秒秒)。

修復網絡配置後,問題就消失了。

1

也許這是一個游泳池的尺寸不合適。

在5分鐘或300秒內撥打11,000個電話表示每秒37個電話。每個連接平均0.016秒意味着您可以處理每個連接2,313個呼叫。 4-5的池大小應該能夠處理流量。如果請求結束等待連接變爲可用,我不知道這些查詢中的一個查詢是否運行了一段時間。

'SELECT 1 FROM DUAL'查詢是池執行檢查並查看連接是否存在且可用的內容。

您可以嘗試增加池的大小或查看一些其他參數,這些參數控制池對連接執行的操作以確保其處於活動狀態。

+0

池大小高達20和測試驅動程序應用程序只使用一個單一的線程,系統中沒有其他負載,所以我會擔心,如果池大小可以導致這些尖峯。 – beny23

+0

這是值得的,因爲我沒有看到你的原始文本中任何提及池大小。 「SELECT 1 FROM DUAL」是測試查詢。如果您對這些信息的來源充滿信心,我會將一個數據包嗅探器放在線路上,並嘗試查看網絡上發生的事情。 – duffymo

+0

謝謝,我已經更新了游泳池大小的帖子。 +1用於數據包嗅探器。 – beny23

0

是否關閉"Pretest new connections"有幫助?

+0

我們已經嘗試過,並沒有。峯值仍然出現(僅在其他語句中,峯值似乎是隨機的,在簡單的查詢上增加22秒) – beny23