NewRelic向我展示了应用服务器中超过80%的执行时间发生在“中间件ActiveRecord::QueryCache#call”中

这是经过测试的相关代码的要点(尽管我在其他API端点上看到了类似的结果)。

Gist

我正在t2.medium实例和t2.small Postgres RDS DB的max_connections设置为100的AWS Elastic Beanstalk上运行应用程序服务器。我正在通过loader.io对此进行测试,对100个用户进行维护测试客户端负载设置(这意味着每分钟大约有6000个请求)。

有谁知道为什么QueryCache花那么多时间?

最佳答案

不幸的是,QueryCache的问题很普遍,并且似乎有多种原因,但是最常见的是您的EC2应用服务器与数据库之间的连接被临时切断,而QueryCache不能很好地解决这一问题。

解决方法包括大幅增加您的默认连接池大小(例如,增加一个数量级),完全禁用QueryCache或将database.yml中的read_timeout增加到15秒或更多,具体取决于您的环境。

如果read_timeout设置解决了该问题,则您可能需要调查为什么您的应用程序服务器与数据库之间存在如此多的断开连接。

另一个可能不适合您的方法是在与db相同的机器上运行应用程序服务器,但是由于每个人的体系结构,这对所有人都不起作用。看看消除网络变量是否有帮助,肯定是一个有效的测试。祝你好运。

关于ruby-on-rails - ActiveRecord::QueryCache#call占用了70%以上的执行时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31257830/

10-11 09:03