class ActiveRecord::PostgreSQLAnalyzer::LogSubscriber
Constants
- EXPLAINED_SQLS
- IGNORED_PAYLOADS
- SEQ_SCAN
Public Instance Methods
ignore_payload?(payload)
click to toggle source
# File lib/active_record/postgresql_analyzer.rb, line 32 def ignore_payload?(payload) payload[:exception] || IGNORED_PAYLOADS.include?(payload[:name]) || payload[:sql] !~ EXPLAINED_SQLS end
seq_scan?(explain_result)
click to toggle source
# File lib/active_record/postgresql_analyzer.rb, line 36 def seq_scan?(explain_result) explain_result =~ SEQ_SCAN end
sql(event)
click to toggle source
# File lib/active_record/postgresql_analyzer.rb, line 13 def sql(event) payload = event.payload return if ignore_payload?(payload) connection = ObjectSpace._id2ref(payload[:connection_id]) # disable SeqScan when index exists # SEE ALSO: http://www.postgresql.org/docs/9.4/static/indexes-examine.html connection.execute("SET enable_seqscan TO off", "SCHEMA") explain_result = connection.explain(payload[:sql], payload[:binds]) if seq_scan?(explain_result) debug '------------ find Seq Scan query ------------' debug payload[:sql] debug explain_result end end