【问题标题】:Intermittent slow ActiveRecord / MySQL queries间歇性慢 ActiveRecord / MySQL 查询
【发布时间】:2012-07-16 20:27:11
【问题描述】:

希望这里有人能给我一些指点。我们有一个 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)

【问题讨论】:

  • 你有 mysql 终端的访问权限吗?你能在请求慢的时候运行SHOW FULL PROCESSLIST,看看是否以及是什么锁定了数据库

标签: mysql ruby-on-rails activerecord


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 2014-11-01
    相关资源
    最近更新 更多