Commit Graph

13 Commits

Author SHA1 Message Date
Xavier Noria f251437415 disable automatic explain if there is no logger [closes #4671] 2012-01-26 02:50:46 -08:00
Jon Leighton 93c1f11c0a Support configuration on ActiveRecord::Model.
The problem: We need to be able to specify configuration in a way that
can be inherited to models that include ActiveRecord::Model. So it is
no longer sufficient to put 'top level' config on ActiveRecord::Base,
but we do want configuration specified on ActiveRecord::Base and
descendants to continue to work.

So we need something like class_attribute that can be defined on a
module but that is inherited when ActiveRecord::Model is included.

The solution: added ActiveModel::Configuration module which provides a
config_attribute macro. It's a bit specific hence I am not putting this
in Active Support or making it a 'public API' at present.
2011-12-28 18:27:41 +00:00
Jon Leighton 15fbf5b58b auto_explain_threshold_in_seconds should be a global config option so it can be shared between AR::Base and AR::Model 2011-12-24 11:08:16 +00:00
Xavier Noria 0065f37826 AS::Concern is not really needed for AR::Explain 2011-12-16 12:12:05 -08:00
Jon Leighton ceb33f8493 Split out most of the AR::Base code into separate modules 🍰 2011-12-15 20:45:37 +00:00
Xavier Noria 4e74bd194b moves some auto explain logic to the subscriber [José Valim & Xavier Noria] 2011-12-04 13:53:26 -08:00
Xavier Noria cfeac38e2b implements a much faster auto EXPLAIN, closes #3843 [José Valim & Xavier Noria]
This commit vastly reduces the impact of auto
explain logging when enabled, while keeping
a negligible cost when disabled.

The first implementation was based on the idea
of subscribing to "sql.active_record" when
needed, and unsubscribing once done. This is
the idea behind AR::Relation#explain. Subscribe,
collect, unsubscribe.

But with the current implementation of notifications
unsubscribing is costly, because it wipes an internal
cache and that puts a penalty on the next event.

So we are switching to an approach where a long-running
subscriber is listening. Instead of collecting the
queries with a closure in a dedicated subscriber, now
we setup a thread local.

If the feature is disabled by setting the threshold
to nil, the subscriber will call a method that does
nothing. That's totally cheap.
2011-12-04 11:52:12 -08:00
Xavier Noria de24ed9f2d removes the convenience instance version of AR::Base.silence_auto_explain
Rationale: As discussed with José and Jon, this convenience
shortcut is not clearly justified and it could let the user
thing the disabled EXPLAINs are related to the model instance
rather than being globally disabled.
2011-12-03 14:26:34 +01:00
Xavier Noria 3a967806ad yield > block.call 2011-12-02 11:44:04 -08:00
Xavier Noria 15dab0d2f5 two small details from the previous patch 2011-12-02 11:29:35 -08:00
Xavier Noria 0be5adaedf implements AR::Base(.|#)silence_auto_explain 2011-12-02 11:16:26 -08:00
Xavier Noria 36cc1f78eb revises some details in the previous explain patch 2011-12-02 09:19:13 -08:00
Xavier Noria 0306f82e0c implements automatic EXPLAIN logging for slow queries 2011-12-02 04:35:43 -08:00