2009-04-30 6 views
1

약 3 년 된 레일 애플리케이션이 있는데 너무 많은 쿼리를 작성하는 페이지에 문제가 있습니다. 로드되는 모든 페이지에는 다음과 같은 여러 행이 있습니다.너무 많은 쿼리를 작성하는 레일 컨트롤러 디버깅

ReqTdsLink Columns (1.0ms) SHOW FIELDS FROM `req_tds_links` 

어떤 종류의 메소드 호출로 인해이 출력이 로그에 표시됩니까? 전에 필터를 찾을 수 없거나이 문제의 원인이 될 수있는 응용 프로그램 컨트롤러의 다른 항목은 없지만 모든보기 (숫자가 천문학적 인 항목)를 아직 확인하지 않았습니다. 이전에 찾던 특정 항목이 필요합니다. 수동으로 각 파일을 검사하여이 문제를 일으킬 수있는 사항을 찾습니다. 이것은 당신의 데이터베이스에서 모델의 속성을 읽어 액티브에 의해 호출된다

-C

+0

사용중인 Rails/ActiveRecord의 버전을 말하지 않았습니다. ActiveRecord는 쿼리 캐싱 및 쿼리 최적화가 크게 개선되어 3 년 만에 많은 변화가있었습니다. –

답변

0

이 줄은 실제로 모델을 호출 할 때 생기는 것입니다. [Model1, Model2, Model3]처럼 보이는 응용 프로그램 컨트롤러에 배열이 있고 [Model1 ','Model2 ','Model3 ' ] 그리고 여분의 모든 전화를 고쳤습니다.

1

감사합니다. 프로덕션 환경에서는 여러 번 발생하지 않지만 개발 모드에서는 Rails가 매번 변경 사항을 픽업 할 때마다 테이블을 쿼리합니다.

2

개발 모드 또는 프로덕션 모드로 실행 중이십니까?

SHOW FIELDS FROM foo은 언급 한대로 모델에서 수행되므로 생성 할 접근 자 메서드를 알 수 있습니다.

개발 모드에서는 모든 요청이 이루어 지므로 웹 서버를 자주 다시로드 할 필요가 없지만 프로덕션 모드에서는 3 년 된 버전의 Rails를 실행중인 경우에도이 정보를 캐시해야합니다.

+0

Rails 2.1.2에서 필자는 지금 당장이 사실입니다. –

1

이 문제가 다시 발생하고 쿼리를 호출하는 방법을 추적해야하는 경우 쿼리 추적 플러그인을 제안합니다 (http://github.com/ntalbott/query_trace/tree/master). 모든 SQL 쿼리에 대해 스택 추적을 로그에 추가합니다. 매우 편리합니다.