• X
    implements a much faster auto EXPLAIN, closes #3843 [José Valim & Xavier Noria] · cfeac38e
    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.
    cfeac38e
explain.rb 3.5 KB