故障现象:

1:所有业务调度任务执行失败;
2:手动测试无法连接数据库;
3:并没有收到集群的异常告警;

处理步骤:

1:首先登陆 gpcc 查看集群状态;
 发现所有greenplum 节点及服务都正常,但是屏幕打印报错信息 :Sorry,too many clients already (alert)

2:在master节点通过gpstate -s和查看/usr/local/gpdata/gpmaster/gpseg-1/pg_log/gpdbxxxxxx.csv日志,都可以看到以下报错信息

"ERROR","58M01","failed to acquire resources on one or more segments","FATAL: sorry, too many clients already.

Performance Monitor - failed to connect to gpperfmon database: FATAL:  sorry, too many clients already.

登陆服务器查看集群状态:

gpstate -b =》 显示简要状态 

gpstate -f =》 显示备用主机详细信息  

gpstate -m =》 显示镜像实例同步状态  

gpstate -Q =》 快速检查主机状态  

确认集群节点无异常!

调整集群最大连接数

此时基本确定集群连接数过多导致,准备使用杀掉连接解决问题,但是数据库集群已经无法连接,使用gpconfig 命令修改;

主要修改参数如下:

max_connections :最大连接数,Segment建议设置成Master的5-10倍。

查看现有配置值:
gpconfig -s max_connections

GUC : max_connections
Master value: 250
Segment value: 750

#### 修改配置
gpconfig -c max_connections -v 2000 -m 500
max_prepared_transactions
这个参数只有在启动数据库时,才能被设置。它决定能够同时处于prepared状态的事务的最大数目(参考PREPARE TRANSACTION命令)。如果它的值被设为0。则将数据库将关闭prepared事务的特性。它的值通常应该和max_connections的值一样大。每个事务消耗600字节(b)共享内存。

查看现有配置值:
gpconfig -s max_prepared_transactions
Values on all segments are consistent
GUC          : max_prepared_transactions
Master  value: 250
Segment value: 250
修改配置
gpconfig -c max_prepared_transactions  -v 500

修改参数后,重启数据库生效

关闭数据库 :gpstop -M fast  -a
快速启动:   gpstart -a 

验证配置是否生效:

gpconfig -s max_connections
gpconfig -s max_prepared_transactions

数据启动后,已经可以正常使用!此时涉及的数据库没有涉及在线业务,所有直接重启了。

使用超级用户登陆,处理步骤参考:

# su - gpadmin
psql -d postgres

查看所有的连接;
postgres=# SELECT * FROM pg_stat_activity;

执行以下命令查看当前的总连接数:

psql -d postgres -c "select count(*) from pg_stat_activity"

查看第2步检查到的报错库的连接数:

psql -d postgres -c "select count(*) from pg_stat_activity where datname = 'pt_roi'"

通过以下命令来断开报错的库的连接,释放资源:

SELECT pg_terminate_backend(pg_stat_activity.procpid) FROM pg_stat_activity WHERE pg_stat_activity.datname = ' $(DATABASES)' AND procpid <> pg_backend_pid();

问题的原因分析:

1:新业务服务没有经过测试就上线,产生大量的异常链接,导致数据库链接被沾满;
2:数据库连接没有做监控告警,导致连接被占满后才知道,需要添加连接数监控告警,大于正常数出发告警,提前处理;
3:调整数据库任务、网络链接超时时间,防止大量网络连接不能断开;