JPA 二級快取 網路多播協議導致的資料庫效能問題

babyyellow發表於2015-11-10

有一套老專案 , 已經跑了幾年了, 效能問題一直很好, 不存任何問題, 

近期 出現資料庫效能問題,  資料庫負載高達50, 最低30左右,  最高 80 . 但是 %user  並不高,  20% 左右 , 說明資料庫的效能還是ok 的. 

只是到達資料庫的請求多了,  經過對資料效能的統計分析, 發現最忙的餓時候,每秒的事務數達到裡10萬級別. 這個跟應用的訪問量是不匹配的. 

而且 ,即便資料庫負載上升這麼多, 到達資料庫的連線增加這麼多, 應用的訪問量卻沒有明顯增加. 

各個mc 也執行正常. 

在對日誌進行分析的時候,發現了一點線索. 


發現 JPA 的二級快取 的多播協議 ,在網路層面,不通 . 有的機器之間是通的,有點機器不通. 

其實 JPA 的二級快取技術,還是相當牛 的 .  跨session 共享.  等等    . 因為這個網路協議不通,主要問題是網路丟包嚴重,導致分散式快取結果,無法再叢集的節點間共享, 

導致了 , 頁面的請求, 在本機沒有cache 的情況下,無法透過共享快取來分享cache , 只能去請求資料庫了. 

這就解釋了, 為什麼訪問量沒有增加, 而資料庫請求 大量增加. 


因為其中一臺應用伺服器, 的組播協議是通的, 我們把訪問量最大的幾個請求引到這個機器上,對資料庫的根本就沒有壓力. 這進一步驗證了,我們的猜測. 


問題找到了, 那麼解決問題的方法, 就很簡單了. 


請網路部門, 調查路由設定, 開通協議傳輸,更換多播地址. 問題搞定. 



如果 你 的應用是基於JPA 的框架開發的, 如果業務訪問量,沒有增加,而 資料庫訪問量大增的情況下, 而又無從下手的情況,你不妨考慮 ,是不是 JPA 的分散式二級快取的出問題了.  

這個快取出問題的最大可能性 就是 網路協議, 在網路層面 被禁止傳輸了. 



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-1826641/,如需轉載,請註明出處,否則將追究法律責任。

相關文章