2012-09-28 4 views
3

에 대한 SQL 쿼리를 인스트루먼트에 대한 패치는 그래서 우리는 몇 가지가 를 사용 다른 사람을 사용하여, 대부분 루비, 응용 프로그램 제품군에서 MySQL의 슬로우 쿼리 로그를 가지고있다. 특정 (MySQL)의 느린 쿼리를 생성 한 코드로 쉽게 추적 할 수 있기를 바랍니다. 이러한 도구에서 사용할 수있는 기능이나 적용 할 수있는 패치가 있습니까? FILEFUNCTION 식별자와 같은 것입니다.도구 또는 루비 속편 또는 ORM 느린 쿼리 로그 분석

답변

2

흥미로운 질문은 여기에 당신이하고있는 것처럼 소리 나는

내가 automatically explain slow queriesconfig.active_record.auto_explain_threshold_in_seconds를 사용합니다 ... 그것을 처리 할 방법입니다 .

그런 다음 방법을 ActiveRecord::Explain에서 무시하고 관련 데이터를 로그에 추가합니다. 여기에 현재의 스택 트레이스를 추가하는 예입니다

# /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 [email protected] 
      end 

      logger.warn(exec_explain(queries)) 

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


    end 
end 

나는 레일에서 전체 수정 방법에 의존하지 않는 방법을 선호는, 그러나 이것은 내가 안정적으로 작동시킬 수있는 유일한 방법입니다.

가치있는 일이라면, 각 레일 버전에 대한 새로운 기능과 함께 보석으로 스핀하기가 매우 쉽습니다. 앱마다 버전과 관련된 보석을 포함시켜야합니다. 여러 버전의 레일을 지원합니다. 이것은 상기 접근법의 취성의 일부를 최소화하는 역할을한다. 어쨌든, 이것이 도움이되기를 바랍니다 - 행운을 빌어 요!

0

Rails (또는 다른 랙 기반) 앱이 어떻게 시간을 보내고 있는지 빠르게 이해할 수 있도록 랙 미니 프로파일 러를 강력히 추천합니다. 어떤 Ruby 코드가 어떤 SQL 문을 생성했는지 보여주는 데 특히 좋습니다. 잘 사용하는 방법을 배우려면 아래의 세 링크를 모두 방문하십시오. 행운을 빕니다.

http://miniprofiler.com/

http://railscasts.com/episodes/368-miniprofiler

http://samsaffron.com/archive/2012/07/12/miniprofiler-ruby-edition

관련 문제