【发布时间】: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