【问题标题】:RDS database with a PostgreSQL engine connection limit具有 PostgreSQL 引擎连接限制的 RDS 数据库
【发布时间】:2020-12-16 08:42:50
【问题描述】:

我有一个 RDS 实例(db.t2.micro - 1 个 vCPU,1GiB RAM),我通过连接尝试在短时间内模拟数据库上的高负载,并且一直在访问数据库无论数据库实例类如何,连接限制约为 100(我尝试过 db.t2.large - 4 vCPU,16GiB RAM),将“max_connections”参数设置为自定义参数组的一部分并使用RDS proxy用于连接池。

我确实注意到,当我增加数据库实例类时,下面的数据库连接图上的红线消失了,这看起来应该有更多连接可用,但从图中可以看出,连接限制相当固定在 ~100

我已经阅读了人们将数据库连接到 000 和 0000 的线程,即使如此我确信我在配置方面遗漏了一些东西,有什么想法吗?

编辑:如果使用 JDBC 库,我可以超过约 100 个连接,但是当我使用模仿我们的生产系统时,这是一个在 AWS ECS 上作为服务运行的 REST API,我最多可以使用~100,带有 http 500 错误

CloudWatch 日志指示“超出速率”。 REST API 是使用 Microsoft.NET.Sdk.Web 构建的。在我的用例中,服务器需要能够每 15 分钟每秒处理约 500 个 API 请求。

【问题讨论】:

  • 您能否提供更多有关您的 RDS(postgresql 版本?)的确切设置的详细信息。我试图复制他的问题,但仅使用默认设置和 db.t2.medium 我很容易获得 200 到 400 个测试连接,如我的screenshot 所示。
  • 肯定 postgres 端没有这样的限制。我认为问题出在您的客户身上。您的客户本身并没有提出建立更多连接的请求。
  • @Marcin 感谢您的 cmets,我已经用进一步测试的结果更新了原始问题,您是对的,看起来 RDS 方面还可以
  • @DeepakSinghal,是的,看起来是这样,我不知道 REST API 或 ECS 端的瓶颈可能在哪里......有什么想法吗?
  • 如果 REST API 是使用 API 网关实现的,网关可以选择设置throttling。也许阶段或方法级别的 API 将限制设置为 100?此外,如果 API 使用 lambda,则 lambda 也可以通过自己的设置限制为 100。

标签: postgresql amazon-web-services amazon-rds


【解决方案1】:

我真的对 Microsoft 和 .NET 知之甚少,但听起来您的应用程序有一个包含 100 个连接的默认连接池。

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling

在您的数据库连接字符串中尝试添加Max Pool Size=200;

【讨论】:

    【解决方案2】:

    我怀疑你的 API,已经确定是 REST api(可能是你唯一使用的,从信息中不确定)是“Throttling”。

    首先确定它是否节流,请转到您的CloudTrail console

    然后为CloudTrail trail 创建一个表。

    检查Athena 控制台

    然后选择新建查询,键入以下查询并将表名替换为您创建的 clodtrail 表。

    select eventname, errorcode,eventsource,awsregion, useragent,COUNT(*) count 
    FROM your-cloudtrail-table
    where errorcode = 'ThrottlingException'
    AND eventtime between '2020-10-11T03:00:08Z' and '2020-10-12T07:15:08Z'
    group by errorcode,awsregion, eventsource, useragent, eventname
    order by count desc;
    

    一旦您确定您的 API 正在节流,如果节流是由于限制,您可以要求 AWS 团队提高限制 (他们应该能够确认)。

    查看此限制相关对话: https://forums.aws.amazon.com/thread.jspa?threadID=226764

    还可以查看配额文档以了解 ECS 服务的限制: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-quotas.html

    然后继续检查 PG 端显示的连接限制是多少,你可以 psql 进入它并运行命令: 显示 max_connections 或

    postgres=> select * from pg_settings where name='max_connections';
    -[ RECORD 1 ]---+-----------------------------------------------------
    name            | max_connections
    setting         | 83
    unit            |
    category        | Connections and Authentication / Connection Settings
    short_desc      | Sets the maximum number of concurrent connections.
    extra_desc      |
    context         | postmaster
    vartype         | integer
    source          | configuration file
    min_val         | 1
    max_val         | 262143
    enumvals        |
    boot_val        | 100
    reset_val       | 83
    sourcefile      | /rdsdbdata/config/postgresql.conf
    sourceline      | 33
    pending_restart | f
    Hope this helps!.
    

    这将告诉您该特定实例的最大连接数限制。我知道没有这样的限制(有一个理论上的限制)。 PG 中的连接限制是动态的,具体取决于您的实例\集群的内存。 如果您转到 RDS,然后在左侧“参数组” 您可以搜索 max_connections 并检查“值”列

    LEAST({DBInstanceClassMemory/9531392},5000).
    

    【讨论】:

      猜你喜欢
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      相关资源
      最近更新 更多