drds連線池
從DRDS來看,有兩個連線池:
*1、 應用到DRDS的連線池
2、 DRDS到後端RDS的連線池*
應用到DRDS的連線池
目的:提高應用效能,減輕資料庫負載
作用:
1、資源複用:連線可以重複利用,避免了頻繁建立、釋放連線引起的大量效能開銷。在減少系統消耗的基礎上,同時增進了系統的平穩性。
2、提高系統響應效率:連線的初始化工作完成後,所有請求可以直接利用現有連線,避免了連線初始化和釋放的開銷,提高了系統的響應效率。
3、避免連線洩漏:連線池可根據預設的回收策略,強制回收連線,從而避免了連線資源洩漏
某專有云採用的是德魯伊連線池,這也是官網推薦的連線池型別。配置資訊如下圖:

drds之前出現過節點連線數不均衡問題,某幾個節點的壓力過大,導致docker連線異常。
解決過程:
1、修改應用到drds的探活語句,之前探活語句檢視執行計劃發現是打到了drds下面rds的 0 號庫上,導致drds的0號庫qps壓力高。現在修改語句只探活到drds層面,這個主要是針對0號庫壓力高的問題。
2、升級德魯伊版本,並且設定固定時間關閉連線的引數phyTimeoutMillis升級後觀察連線數還是比較平均的。當然drds也有自己的slb負載均衡,通過相應的演算法來將應用連線數分配到各個docker節點上。
DRDS到後端RDS的連線池
DRDS到後端的連線池是指:從每個DRDS節點到後端RDS每個分庫的連線池。這個連線池是在drds的docker節點上的。
DRDS後端連線池的大小設定是與後端RDS的最大連線數相關的,參考最大連線處設定公式如下:
最大連線數=RDS例項最大連線數/DRDS節點數/RDS例項分庫數(每個RDS上的物理分庫數)
改值只是一個參考值
如何修改該值:
1、 通過drds manager中實用功能可以自定義該值,注意appname是show datasources中的schema欄位,也可以通過drdsmanager查詢該值。
2、 通過drds console進行調整例項連線池資訊,會根據後端RDS例項進行調整,並且會reload從drd到rds的連線,這是自動調整的,無法自定義設定。
相關問題:
客戶在進行壓測的過程導致drds的0號庫連線池被打滿,具體報錯理解為connection $RDS_0號庫 full。想要諮詢並且修改drds到後端rds的連線數。
針對該問題,首先建議客戶需要優化對應的慢SQL,並且0號庫rds的例項連線數相比其他的資料庫連線數配置要低,連線池更容易因為慢sql而被打滿,或者說有沒有一些大事務、長事務等佔用連線不釋放等。
應用到drds和drds到rds的兩段連線數是非同步的,沒有繫結關係的。前端到drds的連線數,drds首先接住這些連線,然後通過自己的轉發機制,非同步轉發到節點上去執行,每個節點都會有一個連線池到rds上分庫的連線,這樣也不能保證是哪個節點的連線池被打滿。這也跟業務相關,假如壓測中很多場景是多訪問0號庫的業務,也會導致0號庫出現這個問題,這些都是要去考慮的。
例項連線數是可以增加的,但是不能一味的增加連線數,首先應該從問題根源上確認是否有導致出現連線數打滿的問題,需要去優化的要做好優化,最後考慮去升級規格。避免出現一直升級連線數還是被打滿的問題。