PolarDB支援事務級串連池,您可以根據業務需求使用事務級串連池,協助降低因大量串連導致的資料庫負載壓力。
前提條件
事務級串連池功能需要資料庫代理的版本為2.3.46及以上。
背景資訊
由於PolarDB PostgreSQL版(相容Oracle)的串連模型是每個串連需要建立一個進程進行處理,所以當用戶端同時保持大量的長串連或頻繁建立新串連時,資料庫的壓力會變大,而且效能也會嚴重衰減。
為了提高這些情境下的效能。PolarDB PostgreSQL版(相容Oracle)提供事務級串連池功能。通過讓多個前端串連共用一個後端串連的方式,減少後端建連次數與持續連線數,從而提升這些情境下資料庫的處理能力。
原理介紹
事務級串連池主要用於減少直接連接到資料庫的Business Connectivity數,以及減少短串連情境下頻繁建連帶來的負載。
開啟事務級串連池後,當用戶端發送請求時,會先與PolarDB代理建連,代理不會馬上將其與後端資料庫建連,而是先從事務級串連池裡尋找是否存在可用的串連(判斷是否為可用串連的條件:user、dbname和系統變數這3個參數值是否一致)。若不存在,代理會與資料庫建立一個新串連;若存在,則從串連池裡直接拿出並使用,並在當前事務結束後將該串連放回事務級串連池,方便下個串連請求繼續使用。從而達到減少了資料庫代理和資料庫的串連數的目的。
開啟事務級串連池後,用戶端與PolarDB代理間可以存在上千個串連,但代理與後端資料庫間可能只存在幾十或幾百個串連。
PolarDB代理本身並沒有最大串連數的限制,串連數的限制主要由後端資料庫中計算節點的規格決定。未開啟事務級串連池時,每條由用戶端發起的串連都需要在後端主節點和所有隻讀節點上各建立一個對應的串連。
使用說明
開啟事務級串連池
登入PolarDB控制台。
在控制台左上方,選擇叢集所在的地區。
找到目的地組群,單擊叢集ID。
在連結地址地區,單擊配置。
單擊串連池右側的事務級。
單擊確定。
關閉事務級串連池
登入PolarDB控制台。
在控制台左上方,選擇叢集所在的地區。
找到目的地組群,單擊叢集ID。
在連結地址地區,單擊配置。
單擊串連池右側的關閉。
單擊確定。
使用限制
當執行以下行為時,鎖定串連,直至串連結束,即該串連不會再被放到串連池裡供其他使用者串連使用。
執行
PREPARE語句大報文(例如16 MB以上)
使用COPY模式(
Copy Mode)使用重新整理模式(
Flush Mode)暫存資料表(
Temporary Table)、序列(Sequence)、視圖(View)在事務中
聲明遊標(
Cursor)
以下PostgreSQL特性與事務級串連池存在相容性限制,使用時可能導致非預期行為。建議在啟用這些功能時,關閉事務級串連池,以確保語義正確性:
序列(
Sequence)應用級鎖(
Advisory Lock)監聽與通知(
LISTEN/NOTIFY)可保持遊標(
Holdable Cursor)
由於串連可能會被複用,所以使用
select pg_backend_pid()查詢當前串連的pid可能會變化。由於串連可能會被複用,所以
pg_stat_activity或者SQL洞察中顯示的IP地址和連接埠,可能會與用戶端實際的IP地址和連接埠不一致。
串連池的選擇
您可以根據如下建議評估選擇是否開啟串連池:
若業務使用的多為長串連且串連數較少,或者業務本身已具備較好的串連池,那麼您可以不使用PolarDB的串連池功能。
若業務使用的串連數較多(如串連數需求上萬)或使用的是Serverless服務(即串連數會隨著業務端伺服器的擴容而線性增加),且確認您的業務不涉及上述事務級串連池使用限制的情境,那麼您可以選擇開啟事務級串連池。