如何处理数据库连接数满

文章目录

环境

系统平台:

版本:4.1.1

症状

数据库无法访问,根据应用程序提供的错误信息,如下图所示:

问题原因

数据库设置的连接数已满,无法建立新的连接。

可能原因如下:

1.数据库设置连接数过小(常见于数据库安装完后,未修改连接数,使用的默认值100)。

2.应用程序异常占用。

解决方案

一、查询当前数据库连接数设置

sql 复制代码
--管理员用户可以连进数据库时,连入数据库查询(普通用户连接数被占满时,默认保留3个连接给管理员使用)



highgo=# show max_connections;

 max_connections

-----------------

 500

(1 row)



--管理员用户无法连进数据库时,通过查询配置配置文件确认参数值设置(postgresql.auto.conf覆盖postgresql.conf设置值)

[root@localhost ~]# cat $PGDATA/postgresql.conf|grep max_connections

max_connections = 100                   # (change requires restart)

[root@localhost ~]# cat $PGDATA/postgresql.auto.conf|grep max_connections

max_connections = 500

二、数据库设置连接数过小

与客户说明情况,调整连接数需重启数据库,征得客户同意后,适当增大连接数。

sql 复制代码
--管理员用户连进数据库,修改连接数

highgo=# alter system set max_connections = 800;

ALTER SYSTEM



--重启数据库

[root@localhost ~]# pg_ctl restart

waiting for server to shut down.... done

server stopped

waiting for server to start....2023-09-25 10:31:07.064 CST [2334] LOG:  data encryption performed by sm4

2023-09-25 10:31:07.066 CST [2334] LOG:  Password detection module is disabled

2023-09-25 10:31:07.066 CST [2334] LOG:  starting HighGo Security Enterprise Edition Database System 4.5.8 on x86_64,build on 20220708

2023-09-25 10:31:07.066 CST [2334] LOG:  listening on IPv4 address "0.0.0.0", port 5866

2023-09-25 10:31:07.066 CST [2334] LOG:  listening on IPv6 address "::", port 5866

2023-09-25 10:31:07.067 CST [2334] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5866"

2023-09-25 10:31:07.099 CST [2334] LOG:  redirecting log output to logging collector process

2023-09-25 10:31:07.099 CST [2334] HINT:  Future log output will appear in directory "hgdb_log".

 done

server started



--查询连接数

highgo=# show max_connections;

 max_connections

-----------------

 800

(1 row)

管理员用户无法连进数据库时,将postgresql.auto.conf配置文件中的max_connections值修改后,重启数据库。

条件允许时,建议重启数据库前先停止应用程序,重启完成后,再启动应用程序。

三、应用程序异常占用

1.查询占用连接数较多的数据库及用户

sql 复制代码
select now(),state,count(*),usename,datname from pg_stat_activity group by 1,2,4,5 order by count desc;

无法连入数据库查询时,在操作系统层查看进程信息进行判别

ps -ef|grep post

2.联系对应的应用人员释放异常占用连接

应用无法释放时,征得应用人员同意后,可使用管理员用户连入数据库执行如下sql协助其断开连接

sql 复制代码
--断开数据库所有空闲连接

select pg_terminate_backend(pg_stat_activity.pid)

from pg_stat_activity

where datname='数据库名' and pid<>pg_backend_pid() and state='idle';




--断开数据库所有连接

select pg_terminate_backend(pg_stat_activity.pid)

from pg_stat_activity

where datname='数据库名' and pid<>pg_backend_pid();

管理员用户无法连入数据库时,可先在系统层kill几个空闲连接后,再尝试连入,若kill后,应用仍不断重复发起连接,可让应用人员先停止相关应用程序后再进行操作。kill操作示例如下:

sql 复制代码
[root@localhost ~]# ps -ef|grep postgres|grep idle

root       8531   3754  0 13:25 ?        00:00:00 postgres: sysdba highgo [local] idle

root       8650   3754  0 13:32 ?        00:00:00 postgres: sysdba highgo x.x.100.27(52972) idle

root       8653   3754  0 13:32 ?        00:00:00 postgres: sysdba highgo x.x.100.27(52976) idle

root       8656   3754  0 13:32 ?        00:00:00 postgres: sysdba highgo x.x.100.27(52980) idle

[root@localhost ~]# kill 8650

[root@localhost ~]# ps -ef|grep postgres|grep idle

root       8531   3754  0 13:25 ?        00:00:00 postgres: sysdba highgo [local] idle

root       8653   3754  0 13:32 ?        00:00:00 postgres: sysdba highgo x.x.100.27(52976) idle

root       8656   3754  0 13:32 ?        00:00:00 postgres: sysdba highgo x.x.100.27(52980) idle

必要时,征得客户同意后,可通过重启数据库释放连接。

相关推荐
ZKNOW甄知科技2 分钟前
燕千云深度集成飞书:以AI之力,开启无感IT运维体验
大数据·运维·网络·数据库·人工智能·低代码·集成学习
TDengine (老段)17 分钟前
TDengine 免费版说明
java·大数据·数据库·物联网·时序数据库·tdengine
汉知宝科技18 分钟前
历史案件数据迁移:知识产权管理系统落地的第一道门槛
大数据·数据库
这就是佬们吗27 分钟前
Python入门⑤-异常处理、文件操作与实战项目
开发语言·数据库·python·算法·pycharm
吴声子夜歌29 分钟前
MongoDB 4.x——SpringBoot框架整合
数据库·spring boot·mongodb
Database_Cool_1 小时前
阿里云 Tair(企业级内存数据库)vs 腾讯云 Redis 云缓存深度对比:性能/数据结构/成本全维度 Benchmark
数据库·阿里云·缓存
流星白龙1 小时前
【Redis】1.Redis特性
数据库·redis·缓存
奶糖 肥晨1 小时前
DBeaver 安装与 MySQL 连接配置教程
数据库·mysql
woshihuanglaoshi1 小时前
数据迁移与版本管理 - Flutter在鸿蒙平台实现数据库升级策略
数据库·学习·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
java_logo3 小时前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris