跳至内容 跳至搜索
方法
E
F
I
S

常量

EXPLAINED_SQLS = /\A\s*(\/\*.*\*\/)?\s*(with|select|update|delete|insert)\b/i
 
IGNORED_PAYLOADS = %w(SCHEMA EXPLAIN)
 

SCHEMA 查询无法被 EXPLAIN,而且我们也不想对自己的 EXPLAIN 运行 EXPLAIN,无论它有多么循环往复的美妙。

另一方面,我们希望监控真实数据库查询的性能,而不是查询缓存访问的性能。

MUTEX = Mutex.new
 

类公共方法

ensure_subscribed()

# File activerecord/lib/active_record/explain_registry.rb, line 16
def ensure_subscribed
  return if @subscribed
  MUTEX.synchronize do
    return if @subscribed

    ActiveSupport::Notifications.subscribe("sql.active_record", new)
    @subscribed = true
  end
end

实例公共方法

finish(name, id, payload)

# File activerecord/lib/active_record/explain_registry.rb, line 31
def finish(name, id, payload)
  if ExplainRegistry.collect? && !ignore_payload?(payload)
    ExplainRegistry.queries << payload.values_at(:sql, :binds)
  end
end

ignore_payload?(payload)

# File activerecord/lib/active_record/explain_registry.rb, line 48
def ignore_payload?(payload)
  payload[:exception] ||
    payload[:cached] ||
    IGNORED_PAYLOADS.include?(payload[:name]) ||
    !payload[:sql].match?(EXPLAINED_SQLS)
end

silenced?(_name)

# File activerecord/lib/active_record/explain_registry.rb, line 37
def silenced?(_name)
  !ExplainRegistry.collect?
end

start(name, id, payload)

# File activerecord/lib/active_record/explain_registry.rb, line 27
def start(name, id, payload)
  # unused
end