间歇性缓慢的ActiveRecord / MySQL查询

时间:2012-07-16 20:27:12

标签: mysql ruby-on-rails activerecord

希望有人能给我一些指示。我们有一个Rails应用程序,横向扩展到5个ruby实例,指向一个MySQL数据库。我们对此应用程序发出的POST请求通常在600毫秒范围内返回。然而,偶尔这些请求会持续很长时间,例如50秒+。它看起来不像ruby代码中发生的任何异常。这是否意味着我们需要扩展MySQL实例?据我所知,我们并没有那么努力,当然不是20k +请求一秒钟,我认为是它可以处理的。将不胜感激任何指向从哪里开始寻找。我们也开始使用NewRelic分析我们的应用程序。

Started POST "/api/something" for *** at 2012-07-16 19:00:19 +0000
  Processing by SomethingController#create as JSON
  Parameters: {}
Completed 200 OK in 59542ms (Views: 1.8ms | ActiveRecord: 59265.2ms)

1 个答案:

答案 0 :(得分:0)

1。)查看应用程序生成该59s数据库查询之前发送的params哈希值。将其与其他参数进行比较,寻找可能导致问题的差异。

2。)使用mysqld选项启动--log=/path/to/log.log以记录服务器处理的所有查询,并查看花费这么长时间的查询。

3.)检查所有外键是否都有索引。默认情况下,Rails不会向外键列添加索引。这通常是一些铁路开发人员忽略的问题。当你有一些没有索引的外键时,通过迁移为它们添加一个索引。