콘솔에서 쿼리 (예 : MyModel.where(...)또는 record.associated_things)를 실행할 때 어떤 일이 발생하는지 더 잘 이해할 수 있도록 실행중인 실제 데이터베이스 쿼리를 어떻게 볼 수 있습니까?
콘솔에서 쿼리 (예 : MyModel.where(...)또는 record.associated_things)를 실행할 때 어떤 일이 발생하는지 더 잘 이해할 수 있도록 실행중인 실제 데이터베이스 쿼리를 어떻게 볼 수 있습니까?
답변:
콘솔에 다음 행을 입력하십시오.
ActiveRecord::Base.logger = Logger.new(STDOUT)
콘솔에 다음 행을 입력하십시오.
ActiveRecord::Base.connection.instance_variable_set :@logger, Logger.new(STDOUT)
ActiveRecord::Base.logger = nil
.explainRails 4 에는 방법 이 있습니다 .
(도 .to_sql작동하지만 포함을 표시하지 않습니다)
Category.includes(:products).explain
=> EXPLAIN for: SELECT "categories".* FROM "categories" 0|0|0|SCAN TABLE categories
EXPLAIN for: SELECT "categories_products".* FROM "categories_products" WHERE "categories_products"."category_id" IN (1, 2) 0|0|0|SCAN TABLE categories_products
EXPLAIN for: SELECT "products".* FROM "products" WHERE "products"."id" IN (1, 2, 3, 4, 5, 6, 7) 0|0|0|SEARCH TABLE products USING INTEGER PRIMARY KEY (rowid=?) 0|0|0|EXECUTE LIST SUBQUERY 1
.explain유언장이 일을하는 데는 너무 많은 시간이 걸렸습니다 .to_sql. 그리고 .explain여전히 pg 콘솔에서 실행할 수있는 원시 형식의 SQL 쿼리를 제공하지 않습니다. 하지만 설명하고 분석하려면 원시 쿼리가 필요했습니다. 지금은 설명과 관련이있을 것 같습니다.
최근부터 다음을 사용할 수 있습니다.
https://github.com/dejan/rails_panel
Chrome 용 개발자 콘솔 패널 추가 기능 과 다음과 같이 애플리케이션의 Gemfile에 추가해야하는 gem 파일로 구성됩니다 .
group :development do
gem 'meta_request'
end
그런 다음 다시 실행하십시오.
bundle install
Rails 6부터는 더 편리한 접근 방식이 있습니다 ActiveRecord::Base.verbose_query_logs = true. 콘솔에 추가하기 만하면 모든 SQL 호출과 호출 된 위치를 볼 수 있습니다. 더 많은 정보 https://guides.rubyonrails.org/debugging_rails_applications.html#verbose-query-logs