大數據

好消息,Hologres默認連接數增加一倍啦!

好消息,從Hologres V0.10.25版本開始Hologres的默認連接數增加一倍啦!這就意味著,同等規格實例將會擁有更多的連接數,業務上也可以增加更多的應用去連接Hologres,無需再為連接數不夠而擔心啦!

下面我們來康康現在新版本的連接數和實例規格的映射關係吧:

實例規格

最大總連接數(個) ①

Superuser預留總連接數

32Core

256(128*2)

6

64Core

512(128*4)

6

96Core

768(128*6)

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無效連接,方便快捷,簡單易用!

更多有關連接數的新功能將會陸續發佈,請及時關注群或者社區最新消息!

總結

默認連接數的增加,可以方便業務去連接更多的應用,但並不意味著連接數是無限制使用的,我們需要合理的規劃和正確的使用,才能帶來事半功倍的效果!下面再為大家總結使用連接數時的最佳姿勢:

  1. 善用賬號權限,儘量避免Superuser直接連接應用,以方便Superuser賬號及時管理連接數
  2. 應用上合理的設置連接池釋放機制,同時也建議為單個用戶預留連接限制,防止資源浪費
  3. 定期清理空閒連接,防止連接洩漏或者空閒連接佔用過多的資源

感謝您的閱讀,也歡迎使用體驗Hologres,可以參考使用手冊,同時也歡迎掃碼加入釘群進行技術交流:

holo公共雲用戶群.jpg

Leave a Reply

Your email address will not be published. Required fields are marked *