好消息,從Hologres V0.10.25版本開始,Hologres的預設連接配接數增加一倍啦!這就意味着,同等規格執行個體将會擁有更多的連接配接數,業務上也可以增加更多的應用去連接配接Hologres,無需再為連接配接數不夠而擔心啦!
下面我們來康康現在新版本的連接配接數和執行個體規格的映射關系吧:
執行個體規格 | 最大總連接配接數(個) ① | Superuser預留總連接配接數 |
32Core | 256(128*2) | 6 |
64Core | 512(128*4) | |
96Core | 768(128*6) | |
128Core | 1024(128*8) | 9 |
160Core | 1280(128*10) | 12 |
192Core | 1536(128*12) | 15 |
256Core | 2048(128*16) | 18 |
400Core | 3200(128*25) | 30 |
512Core | 4096(128*32) | 36 |
Hologres運作時的資源包括用于中繼資料管理的程序資源、用于查詢服務的計算資源、用于優化資料寫入的導傳入連結路資源以及緩存服務。所有服務基于容器技術,通過多個并行的容器計算節點實作高性能并行計算能力。
Hologres基于執行個體的資源規格提供預設的最大連接配接數是針對大多數場景,經過調校和優化的預設配置。最大連接配接數不可修改,系統擴容或者縮容時,最大連接配接數同時調整為對應規格的預設連接配接數。
但是預設連接配接數的增加,并不意味着業務上可以無限制随便使用,是以,本文除了帶來以上好消息外,還為大家準備了關于連接配接數使用的最佳實踐,以下内容全是實操幹貨,建議收藏本文并反複閱讀,以幫助業務更好的使用Hologres。
實踐1:檢視執行個體連接配接數相關資訊
1.檢視執行個體預設連接配接數
當您建立執行個體并連接配接開發工具之後,可以執行如下SQL語句檢視目前執行個體版本的最大連接配接數
show max_connections;
說明:
1)以上SQL語句的執行結果展示的是單個Frontend節點最大連接配接數,最大總連接配接數=單Frontend節點最大連接配接數*Frontend節點數,上面映射表中最大連接配接數的括号中為具體每個節點的規格。
2)舊執行個體版本的查詢結果還是會跟之前一緻,若有需求可以提工單或者找對應技術支援更新至最新版本,連接配接數将會預設增加一倍。
2.檢視DB連接配接數
可以通過如下指令檢視目前DB的連接配接數
SELECT datname
,COUNT(1) AS COUNT
FROM pg_stat_activity
WHERE backend_type = 'client backend'
AND application_name != 'hologres'
AND usename != 'holo_admin'
GROUP BY datname;
3.檢視連接配接數狀态
通過查詢pg_stat_activity視圖來擷取所有JDBC或PSQL連接配接的狀态。
select * from pg_stat_activity where backend_type = 'client backend' and state = '<statename>';
其中statename是需要填寫的狀态參數名,包括以下幾種:例如,您可以執行如下指令查詢目前執行個體的空閑連接配接。
- idle:空閑連接配接,表示程序在等待新的用戶端指令。
- active:活躍連接配接,表示程序正在執行查詢操作。
- idle in transaction:表示程序處于一個事務中,但是目前沒有執行查詢操作。
- idle in transaction (aborted):表示程序處于一個事務中,該事務存在語句錯誤,并且程序目前沒有執行查詢操作。
示例檢視空閑連接配接:
select * from pg_stat_activity where backend_type = 'client backend' and state = 'idle';
Holoweb等Hologres周邊元件會通過JDBC的方式占用一定的連接配接數,如果您的連接配接數滿足需求,無需關心此類連接配接數的占用。當SQL連接配接數長期接近或達到max_connections時,意味着您需要檢查您的應用是否存在連接配接數洩漏情況,需要在應用端合理設定連接配接池大小,或者您也可以釋放空閑連接配接。
注意:若是您的賬号是superuser,則可以檢視到目前執行個體下的所有連接配接,但是若您的賬号不是superuser,則隻能看到自己賬号的相關連接配接。
實踐2:管理者預留連接配接
Hologres會為Superuser預留連接配接,不同的執行個體規格預留的連接配接數不同,具體預留關系可以參考上表。
Superuser預留連接配接用于在連接配接數達到最大時對連接配接進行管理操作(如終止idle連接配接),普通使用者的連接配接數最大為max_connections減去預留連接配接。
在實踐中,不建議普通使用者使用Superuser賬号操作資料庫,否則會導緻連接配接全部占滿,且無法通過管理管道釋放連接配接。(敲黑闆,重點!重點!)
實踐3:單個使用者預留連接配接
Hologres支援為單個使用者設定連接配接數上限,以防止某個使用者占用過多連接配接造成資源浪費。
1.限制單個使用者連接配接數。
ALTER ROLE "雲賬号ID" CONNECTION LIMIT <number>;
參數 | 說明 |
雲賬号ID | 需要限制的賬号ID,如果為RAM使用者,需要在賬号UID前加p4_。更多關于賬号的說明,請參見 賬号概述 。 |
number | 限制的連接配接數個數。 |
使用示例:
如下示例限制RAM使用者283813xxxx,最多隻有一個1連接配接。
ALTER ROLE "p4_283813xxxx" CONNECTION LIMIT 1;
2.檢視使用者的限制連接配接數
您可以執行如下語句檢視目前已經為執行個體使用者設定的限制連接配接數。
SELECT rolname, rolconnlimit FROM pg_roles WHERE rolconnlimit <> -1;
查詢示例結果如下:
rolname | rolconnlimit
---------------+--------------
p4_283813xxxx | 1
(1 row)
實踐4:終止連接配接
如果您遇到如下情況,則說明系統連接配接數已經達到上限:
- 連接配接數達到甚至超出max_connections的取值,您可以在Hologres管控台的監控告警頁檢視連接配接數。
- 産生FATAL: sorry, too many clients already connection limit exceeded for superusers報錯。
- 産生FATAL: remaining connection slots are reserved for non-replication superuser connections報錯。
當您有上述情況産生,可以通過Superuser賬号連接配接執行個體,執行如下語句檢視空閑連接配接是否過多。
select * from pg_stat_activity where backend_type = 'client backend' and state = 'idle';
如果查詢結果顯示空閑程序過多,并且确定是無用的空閑連接配接時,可以找到上述語句結果中的pid字段,并執行如下語句釋放空閑連接配接。
-- cancel該連接配接上的query
select pg_cancel_backend(<pid>);
--結束對應的背景連接配接程序
select pg_terminate_backend(<pid>);
--批量終止背景idle連接配接程序,釋放連接配接
SELECT pg_terminate_backend(pid)
,query
,datname
,usename
,application_name
,client_addr
,client_port
,backend_start
,state
FROM pg_stat_activity
WHERE length(query) > 0
AND pid != pg_backend_pid()
AND backend_type = 'client backend'
AND state = 'idle'
AND application_name != 'hologres'
AND usename != 'holo_admin';
新功能預告
為了能讓大家更好的管理連接配接以及可視化方式優雅的殺連接配接,後期将會在Holoweb開放連接配接數管理功能,屆時您可以通過Holoweb直接檢視目前執行個體所有的連接配接數資訊,并且可以通過可以通過可視化的方式kill無效連接配接,友善快捷,簡單易用!
更多有關連接配接數的新功能将會陸續釋出,請及時關注群或者社群最新消息!
總結
預設連接配接數的增加,可以友善業務去連接配接更多的應用,但并不意味着連接配接數是無限制使用的,我們需要合理的規劃和正确的使用,才能帶來事半功倍的效果!下面再為大家總結使用連接配接數時的最佳姿勢:
- 善用賬号權限,盡量避免Superuser直接連接配接應用,以友善Superuser賬号及時管理連接配接數
- 應用上合理的設定連接配接池釋放機制,同時也建議為單個使用者預留連接配接限制,防止資源浪費
- 定期清理空閑連接配接,防止連接配接洩漏或者空閑連接配接占用過多的資源
感謝您的閱讀,也歡迎使用體驗Hologres,可以參考
使用手冊,同時也歡迎掃碼加入釘群進行技術交流:
