NewRelic告诉我,应用服务器中超过80%的执行时间发生在“Middleware ActiveRecord :: QueryCache#call”
以下是测试相关代码的要点(尽管我在其他API端点上看到了类似的结果)。
我正在t2.medium实例上的AWS Elastic Beanstalk上运行应用服务器,并且max_connections设置为100的t2.small Postgres RDS数据库。我正在通过loader.io对此进行测试,对100个用户进行测试使用维护客户端负载设置(这意味着每分钟大约6000个请求)。
有没有人知道为什么QueryCache花了这么多时间?
答案 0 :(得分:3)
不幸的是,QueryCache的这个问题非常普遍,似乎有多种原因,但最常见的是你的EC2应用服务器和数据库之间的连接暂时被切断,而且QueryCache并没有特别好地解决这个问题。
补救措施包括大幅增加默认连接池大小(例如,高出一个数量级),完全禁用QueryCache,或者将database.yml中的read_timeout
增加到15秒或更长时间,具体取决于您的环境。
如果read_timeout设置解决了问题,您可能需要调查为什么应用服务器和数据库之间存在如此多的断开连接。
另一个可能不适合您的选择的路径是在与数据库相同的计算机上运行应用服务器,但由于其体系结构,这对每个人都不起作用。它当然可以是一个有效的测试,看看消除网络变量是否有帮助。祝你好运。