好消息,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,可以参考使用手册,同时也欢迎扫码加入钉群进行技术交流:

好消息,Hologres默认连接数增加一倍啦!


上一篇:来电科技:基于Flink+Hologres的实时数仓演进之路


下一篇:SAS学习笔记之《SAS编程与数据挖掘商业案例》(4)DATA步循环与控制、常用全程语句、输出控制