【问题标题】:How can I speed up PostgreSQL connections from pgbouncer? (getting a connection constitutes ~80% of latency)如何加快来自 pgbouncer 的 PostgreSQL 连接? (获得连接构成约 80% 的延迟)
【发布时间】:2020-02-06 15:24:39
【问题描述】:

我在 Amazon EC2 实例上设置了基本的 pgbouncer 配置。

我的客户端代码(AWS Lambda 函数,或开发时的本地主机网络服务器)正在通过 pgbouncer 对我的数据库进行 SQL 查询。

目前,每个查询需要 150-200 毫秒的时间来执行,其中大约 80% 的时间是获取连接所需的时间。

这是我获得连接的方式:

long start = System.currentTimeMillis();
Connection conn = DriverManager.getConnection(this.url, this.username, this.password);
log.info("Got connection in " + (System.currentTimeMillis() - start) + "ms")

this.url 只是 pgbouncer 实例的位置。这是测量延迟的样子,其中Got connection 来自上面的代码 sn-p,Executed in 是另一个计时,用于测量在执行 PreparedStatement 后经过的持续时间。第一次连接通常有点慢,这很好,随后的连接相当一致地需要大约 100 毫秒。

DBManager - Got connection in 190ms
DBManager - Executed in 232ms
DBManager - Got connection in 108ms
DBManager - Executed in 132ms
DBManager - Got connection in 108ms
DBManager - Executed in 128ms

有什么办法可以加快速度吗?或者我基本上是在我的请求上坚持至少约 100 毫秒的延迟?我从 Lambda 和 localhost 获得了相似的速度,但不幸的是,由于在 VPC 中使用 Lambda 时设置新的弹性网络接口偶尔会出现 8-10 秒的冷启动延迟,因此我无法将我的 Lambda 放入同一个 VPC。

这是我第一次使用这种设置,所以我真的不知道从哪里开始。我可以通过向数据库或 pgbouncer 添加更多的功率(RAM/CPU)来提高速度吗?我不应该为每个请求都获得一个新连接吗(但这意味着每个 Lambda 都有一个连接池,然后是一个单独的 pgbouncer 池)?

我觉得这肯定是一个很常见的问题,所以一定有一些好的方法来解决它,但我一直找不到任何东西。

【问题讨论】:

    标签: postgresql amazon-web-services amazon-ec2 aws-lambda


    【解决方案1】:

    您必须要求供应商弄清楚您和 pgBouncer 以及 pgBouncer 和数据库服务器之间的路由所花费的时间。我猜这是第一部分。

    如果您想要低延迟,托管数据库可能不适合您。

    我的建议是在您的应用程序中构建一个连接池或在本地安装 pgBouncer,这样您就不必一直与托管系统建立连接。

    【讨论】:

      猜你喜欢
      • 2018-03-29
      • 2011-03-04
      • 2021-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      • 2012-05-01
      相关资源
      最近更新 更多