gpt4 book ai didi

ruby-on-rails - Ruby Sequel 或 ORM 检测 SQL 查询以进行慢速查询日志分析的工具或补丁

转载 作者:行者123 更新时间:2023-12-04 03:34:45 25 4
gpt4 key购买 nike

我们有来自一组应用程序的 MySQL 慢速查询日志,大部分使用 Ruby,一些使用 Rails ActiveRecord,其他使用 Sequel。

我们希望能够轻松地将特定 (MySQL) 慢速查询追溯到生成它的代码。是否有可以在这些工具中启用的功能,或者可以应用于它们的补丁,它添加了嵌入到 SQL 注释中的检测,比如 __FILE____FUNCTION__标识符?

最佳答案

有趣的问题,这是我将如何处理它...

我会使用 config.active_record.auto_explain_threshold_in_secondsautomatically explain slow queries ,就像您正在做的那样。

然后,我将覆盖 ActiveRecord::Explain 中的 logging_query_plan 方法,以将任何相关数据添加到您的日志中。这是一个添加当前堆栈跟踪的示例:

# /config/initializers/add_additional_instumentation_to_explain.rb
module ActiveRecord
module Explain


def logging_query_plan # :nodoc:
return yield unless logger

threshold = auto_explain_threshold_in_seconds
current = Thread.current
if threshold && current[:available_queries_for_explain].nil?
begin
queries = current[:available_queries_for_explain] = []
start = Time.now
result = yield
if Time.now - start > threshold
# START ADDING ADDITIONAL INFORMATION
begin
puts 'ADDING ADDITIONAL INFORMATION...'
raise 'foo'
rescue
puts 'DISPLAYING THE CURRENT STACKTRACE FOR THE FOLLOWING EXPLAIN'
puts $@
end

logger.warn(exec_explain(queries))

end
result
ensure
current[:available_queries_for_explain] = nil
end
else
yield
end
end


end
end

我更喜欢一种不依赖于 rails 的整个修改方法的方法,但这是我可以让它可靠工作的唯一方法。

就其值(value)而言,这很容易分离成一个 gem,每个 rails 版本都有一个新的,并且只需为您的版本、每个应用程序包含相关的 gem,因为听起来您可能支持多个版本的rails。这将有助于最大限度地减少所述方法的一些脆弱性。无论如何,希望这对您有所帮助 - 祝您好运!

关于ruby-on-rails - Ruby Sequel 或 ORM 检测 SQL 查询以进行慢速查询日志分析的工具或补丁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12648414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com