【问题标题】:How to determine what Ruby-on-Rails code generated some SQL?如何确定哪些 Ruby-on-Rails 代码生成了一些 SQL?
【发布时间】:2012-09-17 05:58:45
【问题描述】:

我有一个使用 Rails 2.3 用 Ruby 编写的应用程序。我们使用 ActiveRecord。

有时,ActiveRecord 会生成一些非常低效的 SQL。我们可以使用慢查询日志和new relic 来确定哪些 SQL 存在问题。但是,确定我们的软件中生成有问题的 SQL 的代码行确实很困难。它通常是使用关联和 named_scopes 构建的查询。

我真正想要的是在我们的日志文件中使用生成它的文件名和 我们的 代码行(不是执行查询的 ActiveRecord 行)标记 SQL 的某种方法。

信息应该可以通过调用者数组获得。我不想转储整个数组,我只想要最直接负责的代码的文件名和行。是否有已经这样做的宝石?如果没有,有什么建议吗?

【问题讨论】:

  • 一位同事建议我们将文件名和行号(一旦我们确定它们是什么)作为注释放在 SQL 本身中,而不是仅仅放在常规生产日志文件中。这样,慢查询日志也会有这些信息。

标签: ruby-on-rails activerecord


【解决方案1】:

您应该在 active-record-query-trace gem 中找到一些灵感

编辑: 哎呀,读得太快了,这是针对 RoR 3+ 的。 >This< seems to work for rails 2.3。您还可以找到一些灵感here

【讨论】:

  • 太棒了!感谢您参考 Rails 3 gem。奇怪的是,需要这个的人并不多……
【解决方案2】:

rack-mini-profiler 确实包含有关哪一行 ruby​​ 代码生成了哪个 sql 查询的信息。

【讨论】:

    【解决方案3】:

    New Relic 将为您提供具有 Slow SQL 和事务跟踪功能的单个慢速 SQL 查询的完整堆栈跟踪。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-22
      • 1970-01-01
      • 2011-03-12
      • 2011-06-05
      • 2010-09-22
      • 1970-01-01
      • 2022-01-23
      • 2015-07-30
      相关资源
      最近更新 更多