【发布时间】:2020-07-11 18:50:40
【问题描述】:
我有一个带有 PostgreSQL 数据库的 Rails API。
对 API 的一些请求显示出一种奇怪的行为,即 不依赖于端点。
这些请求(约占总请求的 5-10%)以 相同的 7 个数据库查询:
- 将 client_min_messages 设置为?
- SET standard_conforming_strings = on
- 将 SESSION 时区设置为 ?
- SELECT t.oid, t.typname FROM pg_type WHERE t.typname IN (?) ...
在执行 7 个查询之前,请求也需要很长时间才能启动。
似乎是数据库适配器启动了连接。 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
这会显着减慢查询速度。
我正在使用带有默认参数的 PostegreSQL 11.6 AWS RDS 实例。
这是我的 database.yml 配置:
default: &default
adapter: postgresql
encoding: unicode
username: *****
password: *****
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
production:
<<: *default
database: *****
username: *****
password: *****
pool: 50
如何减少发起连接的数量? 有没有办法缓存查询?
谢谢,
【问题讨论】:
-
你需要什么信息?
-
在pg_stat_activity中,一般有多少'client backend'连接是打开的,它们打开了多长时间(backend_start)。另外,当你说他们需要很长时间才能开始时,你指的是多长时间? 5 毫秒? 5 秒?
-
大约有 3 个连接打开,我会说它们通常平均持续 15 分钟。启动大约需要 50-100ms,而正常请求在 10ms 左右。
-
问题连接是否也仅每 15 分钟出现一次,还是比这更频繁?
标签: ruby-on-rails postgresql amazon-rds