间歇性慢速ActiveRecord/MySQL查询

间歇性慢速ActiveRecord/MySQL查询,mysql,ruby-on-rails,activerecord,Mysql,Ruby On Rails,Activerecord,希望这里有人能给我一些建议。我们有一个Rails应用程序,它横向扩展到5个ruby实例,指向一个MySQL数据库。我们向该应用程序发出的POST请求通常返回600毫秒的范围。然而,偶尔这些请求会运行很长时间,比如50秒以上。在ruby代码中似乎没有发生任何异常情况。这是否意味着我们需要扩展MySQL实例?就我所知,我们并没有那么努力,当然也不是20k+每秒的请求,我认为这是它能处理的。如果您能给我指点一下从哪里开始寻找,我将不胜感激。我们也开始用NewRelic评测我们的应用程序 Started

希望这里有人能给我一些建议。我们有一个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.)查看应用程序生成59s数据库查询之前发送的
params
散列。将其与其他参数进行比较,找出可能导致问题的差异

2.)使用
--log=/path/to/log.log
选项启动
mysqld
,以记录服务器处理的所有查询,并查看耗时如此长的查询


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

您有访问mysql终端的权限吗?当请求速度较慢时,是否可以运行
SHOW FULL PROCESSLIST
,查看是否锁定数据库以及锁定数据库的内容