我在Amazon EC2实例上设置了基本的pgbouncer配置。
我的客户端代码(AWS Lambda函数或开发时的localhost网络服务器)正在通过pgbouncer对我的数据库进行SQL查询。
当前,每个查询要花费150-200ms的时间来执行,其中大约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
来自上述代码段,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
有什么方法可以使速度更快?还是我基本上在请求上停留了至少100ms的延迟?我从Lambda和localhost获得了类似的速度,但是不幸的是,由于在VPC中使用Lambda时,由于新的弹性网络接口的设置偶尔会出现8-10秒的冷启动延迟,因此我无法将Lambda放入同一个VPC。 >
这是我第一次使用这种设置,因此我真的不知道从哪里开始。我可以通过增加数据库或pgbouncer的电源(RAM / CPU)来提高速度吗?我是否不应该为每个请求都获得一个新的连接(但这意味着每个Lambda都有一个连接池,然后是一个单独的pgbouncer池)?
我觉得这肯定是一个非常普遍的问题,因此必须有一些很好的方法来解决它,但是我什么也没找到。
我在Amazon EC2实例上设置了基本的pgbouncer配置。我的客户端代码(AWS Lambda函数或开发时的localhost网络服务器)正在通过...
您必须要求供应商弄清楚您与pgBouncer和pgBouncer与数据库服务器之间的路由所花费的时间是哪部分。我想这是第一部分。