PostgreSQL 连接数过多报错(too many clients already)

这篇具有很好参考价值的文章主要介绍了PostgreSQL 连接数过多报错(too many clients already)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

解决 PostgreSQL 连接数过多报错的情景

一、问题描述

在使用 Navicat 连接 PostgreSQL 数据库时,突然遭遇到了一个报错:“FATAL: sorry, too many clients already”。这一错误提示表明数据库连接数已经达到上限,无法再创建新连接。为了解决这一问题,我采取了一系列查询和配置调整的步骤,从数据库和程序连接池两个方面入手。

数据库版本和程序信息:

  • 数据库版本:PostgreSQL 11.5
查看PostgreSQL 版本
SELECT version();
  • 程序语言和框架:Java 和 Spring Boot

二、分析问题

1. 数据库层面

1.1 查看连接数和连接状态

通过查询数据库连接数量和连接状态,了解数据库中活跃连接的数量以及每个连接的详细信息,包括数据库名称、进程 ID(PID)、应用程序名称和连接状态。

1.2 查看连接超时时间配置

查看数据库中空闲连接的超时时间配置,确保连接池设置合理。

2. 程序方面

通过查看程序中的数据库连接池配置,特别是对于使用 Hikari 连接池的情况,确认连接池的设置是否合理,以及是否需要调整连接池的参数。

三、解决问题的步骤

  1. 查询数据库连接数量和连接状态: 通过执行相关 SQL 查询,了解数据库的连接状况。

  2. 查询连接超时时间配置: 通过 SQL 查询,查看数据库中空闲连接的超时时间配置。

  3. 确认程序连接池配置: 检查程序中使用的连接池配置,特别是 Hikari 连接池的参数,调整配置以确保连接池有效管理连接。

  4. 修改空闲连接超时时间(如有需要): 如果需要,通过 SQL 命令修改数据库中空闲连接的超时时间。

四、查询数据库连接数量

1. 查询数据库可用连接

首先,我使用以下 SQL 查询语句查看当前数据库的可用连接数与实际连接数的差异:

SELECT max_conn - now_conn AS resi_conn
FROM (
    SELECT setting::int8 AS max_conn, (SELECT count(*) FROM pg_stat_activity) AS now_conn
    FROM pg_settings WHERE name = 'max_connections'
) t;

这有助于了解数据库的连接状况,以及是否需要调整连接数上限。

2. 查询数据库连接状态

为了更详细地了解当前连接状态,我执行了以下查询,显示了每个连接的数据库名称、进程 ID(PID)、应用程序名称和连接状态:

SELECT datname, pid, application_name, state
FROM pg_stat_activity;

这提供了连接池中活跃连接的详细信息,有助于定位可能导致连接数过多的问题。

3. 分组查询连接数量

通过以下查询,我统计了每个数据库的连接数,这有助于发现是否有特定数据库占用了过多的连接:

SELECT datname, count(0)
FROM pg_stat_activity
GROUP BY datname;

4. 根据PID关闭连接

--根据PID关闭连接
select pg_terminate_backend(pid) from pg_stat_activity;

5. 空闲连接超时时间

修改空闲连接超时时间(如有需要): 如果需要,通过 SQL 命令修改数据库中空闲连接的超时时间。

-- 设置控制在事务中处于空闲状态的会话的超时时间
ALTER SYSTEM SET idle_in_transaction_session_timeout = 30000;

-- 查询控制在事务中处于空闲状态的会话的超时时间
SHOW idle_in_transaction_session_timeout;

-- 设置控制空闲会话的超时时间
ALTER SYSTEM SET idle_session_timeout = '300s';

-- 查询空闲会话超时时间
SHOW idle_session_timeout;

五、优化程序连接池配置

检查程序中使用的连接池配置,特别是对于使用 Hikari 连接池的情况。以下是一些建议的配置项:

hikari.maximum-pool-size=10
hikari.connection-timeout=30000
hikari.minimum-idle=5
hikari.max-lifetime=1800000
hikari.idle-timeout=600000

参数配置详解:

  • hikari.maximum-pool-size: 设置连接池允许的最大连接数。建议根据实际需求适度增加或减少,确保足够但不过多。
  • hikari.connection-timeout: 连接超时时间,定义连接在空闲状态多久后被释放,以确保连接资源的有效利用。
  • hikari.minimum-idle: 最小空闲连接数,确保连接池始终维持一定数量的活跃连接,降低连接的创建和销毁开销。
  • hikari.max-lifetime: 连接生命周期,定义连接在被释放前可以存在的最长时间,防止连接长时间积累导致资源浪费。
  • hikari.idle-timeout: 空闲连接超时时间,连接在池中空闲的最长时间,超过这个时间将被释放。

这些参数可以根据实际需求进行调整,确保连接池能够更好地管理和释放连接。

通过以上步骤,我成功解决了连接数过多的报错问题,并优化了数据库连接管理。希望这些详细的思路和步骤对您在类似问题的解决中有所帮助。文章来源地址https://www.toymoban.com/news/detail-833345.html

到了这里,关于PostgreSQL 连接数过多报错(too many clients already)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL数据库连接失败,报错:ERROR 1040 (HY000): Too many connections

    MySQL数据库连接失败,报错:ERROR 1040 (HY000): Too many connections 连接MySQL突然出现“ERROR 1040 (HY000): Too many connections”。根据字面意思,应该是数据库的终端太多,下面修改mysql的配置文件解决。 MySQL默认连接数是151 临时配置 如果在生产环境数据库出现了最大连接数建议使用临时

    2024年02月12日
    浏览(47)
  • Mysql报错:too many connections原因及解决方法

    1、原因是mysql连接数过多 解决方案: 1、linux登录mysql: 2、查看mysql允许的最大连接数 3、查看这次mysql服务启动到现在,同一时刻最多mysql有多少连接 4、修改mysql最大连接数 5、以上步骤修改后虽然能登录,但仍有隐患,我们应该把那些sleep的连接杀掉 (1)查看所有连接状态

    2024年02月10日
    浏览(59)
  • ES执行报错:too_many_clause

    问题原因: bool 查询拼接太多了,有一个拼接上限,es默认设置为1024 解决方法:

    2024年02月12日
    浏览(78)
  • ssh 连接错误 Too many authentication failures 解决方法

    有时候使用 ssh 登录 或者 git ssh 方式连接 时会遇到: Too many authentication failures 这个错误的原因是客户端尝试连接次数大于服务端限制的次数。 默认情况下: ssh 客户端会按照认证顺序: 1. 依次尝试 ssh-agent 中的秘钥和配对~/.ssh 的秘钥对 2. 如果都失败了会尝试密码登录 如果

    2024年02月01日
    浏览(38)
  • 导入失败,报错:“too many filtered rows xxx, “ErrorURL“:“

    一、问题: 注:前面能正常写入,突然就报错,导入失败,报错:“too many filtered rows xxx, \\\"ErrorURL\\\":\\\" {\\\"TxnId\\\":769494,\\\"Label\\\":\\\"datax_doris_writer_bf176078-15d7-414f-8923-b0eb5f6d5da1\\\",\\\"TwoPhaseCommit\\\":\\\"false\\\",\\\"Status\\\":\\\"Fail\\\",\\\"Message\\\":\\\" [INTERNAL_ERROR]too many filtered rows\\\",\\\" NumberTotalRows\\\":325476,\\\"NumberLoadedRows\\\":325473,\\\"

    2024年01月18日
    浏览(49)
  • dataset 报错:raise keyerror (key) from err 、too many indexers

    【1】原始代码: 在之后训练过程中,使用dataloader 在for batch 的时候出现报错: raise keyerror (key) from err 【解释】:该报错的原因是存在超过范围的索引 【原因】:

    2024年02月16日
    浏览(39)
  • K8S如何部署ZooKeeper(续)-- Too many connections报错解决

    在上一篇文章中(K8S如何部署ZooKeeper以及如何进行ZooKeeper的平滑替换)我们已经成功部署了ZooKeeper,但是真正切换时,报错如下 在相关服务未迁移K8S时,各个服务都是散落在不同的服务器上的。而当迁移到K8S时,为了方便管理,对服务器进行了重新规划,同一个项目组使用相

    2024年02月01日
    浏览(42)
  • 机器学习报错解决2——ValueError: too many values to unpack (expected 3)

    参考资料:蔚蓝呆鸟 在我学习Pytorch的PIL模块的过程中,运行了如下代码: 大致意思是将一张RGB图片分成R、G、B三个通道,并分别将每个通道的图片保存下来。 但是出现了如下的报错: ValueError: too many values to unpack (expected 3) 翻译一下就是用来接收的变量数与函数需要接收的

    2024年02月02日
    浏览(51)
  • conda出现http429报错:CondaHTTPError: HTTP 429 TOO MANY REQUESTS for url <xxx>

    我的报错信息如下: 在报错的第一行我们可以看到是url:https://mirrors. ustc .edu.cn/anaconda/pkgs/main/linux-64/current_repodata.json有问题,只要 把和ustc相关的源删掉 就好了,步骤如下: 查看该环境下的所有channel (channel就是源,用来找你要安装的包的) 执行命令后,我的电脑上显示:

    2024年04月27日
    浏览(39)
  • 【OpenCV实现图像:用Python生成图像特效,报错ValueError: too many values to unpack (expected 3)】

    Python是一种功能强大的编程语言,也是图像处理领域中常用的工具之一。通过使用Python的图像处理库(例如Pillow、OpenCV等),开发者可以实现各种各样的图像特效。这些特效包括但不限于:滤镜效果(如黑白、模糊、锐化等)、颜色转换、边缘检测、形状识别、图像合成和增

    2024年02月06日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包