背景
PostgreSQL在设计时为DBA考虑了保留连接,通过参数superuser_reserved_connections来控制,也就是说当数据库的最大连接为100时,普通用户最多能连100-superuser_reserved_connections个连接。
剩余的连接是给超级用户保留的,方便DBA连接到数据库进行维护。
但是由于RDS PG/PPAS的用户拿到的是普通用户,如果用户程序有问题,把所有普通用户的连接占满,用户将无法连接到RDS进行问题的排查,就像高速公路堵车连生命通道也堵了。
用户遇到这种情况怎么办呢怎么办?
目前的方法是提工单,RDS的售后来帮助处理,但是效率肯定没有用户自己处理高,要经过提工单的过程。
有没有更好的方法呢?
RDS PG用户连接的规划
PostgreSQL 的连接控制可以精确到数据库或用户。
当用户在一个实例创建了多个用户时,可以为每个用户设置最大连接数。
当用户一个实例创建了多个数据库时,可以为每个数据库设置最大的连接数。
通过这两种手段,就可以为用户留出生命通道。
用法举例
.1. 用户购买了RDS PG的实例,实例规格为1000个连接,选择了一个rds超级用户名为rds_superuser_digoal,用户又创建了一些普通用户。
( rds 超级用户 是介于 数据库超级用户 与 普通用户之间的一种用户。 )
create role r1 login encrypted password 'pwd' connection limit 100;
create role r2 login encrypted password 'pwd' connection limit 500;
create role r3 login encrypted password 'pwd' connection limit 300;
用户使用r1 最多能连100个连接,以此类推。 因此保留给rds_superuser_digoal的有100个连接。 出了问题用户还能用rds_superuser_digoal连接数据库进行排查。
用户也可以通过设置数据库的连接限制,来给postgres或者template1保留连接。
create database db1 connection limit 100;
...
祝大家玩得开心,欢迎随时来 阿里云促膝长谈 业务需求 ,恭候光临。
阿里云的小伙伴们加油,努力做 最贴地气的云数据库 。