Mat*_*usz 8 postgresql amazon-web-services amazon-rds node.js amazon-aurora
我正在为我在高流量高峰期间出现的问题寻找好的解决方案。我在 AWS 上使用 postgres 和 nodejs(knex 用于查询构建) - 详细信息如下。
当我在 RDS 控制台中查看 Performance Insights 时,我看到一些查询停留在“ClientRead”上。我的 RDS 实例相当大,我的 CPU 利用率非常低(1%-10%)。所以我通过连接到数据库并运行查询来确认它pg_stats,结果我看到很多查询在 ClientRead 事件上是空闲的。
什么连接这些查询?绑定。我假设这些参数化查询等待从我的 EC2 实例获取值。我觉得我的服务太慢了,所以我扩展到更多的实例,但在RDS上的结果更糟,更多的连接被阻塞。
对于测试解决方案,我将几个查询从参数化转换为没有绑定的原始 sql 查询(直接在查询中使用值)。而这些查询正是立即运行,没有任何问题。但即使出于安全原因,似乎也不是完美的解决方案。
目前我不知道问题出在哪里?我应该通过在 api gw 上添加节流来减少流量吗?在我的服务中创建内部队列?这是我的 RDS/postgre 的通信问题或设置吗?
如果有人对类似案例有更多经验,或者可以指出可能的解决方案,请链接到可以帮助我或检测问题所在的文档,那就太好了。
AWS RDS (Aurora) Postgres 9.6.9 nodejs 10.12.0 knex 0.17.3 node-postgres 7.4.1
Lau*_*lbe 11
如果您的数据库后端被阻塞等待ClientRead,则意味着数据库正在等待来自客户端的请求。
您看到的查询没有运行查询。如果state不是active,则query包含在此数据库连接上运行的最后一条SQL 语句。
如果您遇到性能问题,原因似乎在数据库之外。
| 归档时间: |
|
| 查看次数: |
4694 次 |
| 最近记录: |