私はいくつかのクエリを実行して、mysqldプロセスが終了せずに100%のCPUパワーを使い始めるという問題に遭遇しました。私はこの質問を正確に指摘したい。問題は、log/development.logには完了したクエリだけが含まれていることです。何か案が?実行前のクエリのログ
2
A
答えて
1
、SQLクエリを考えてみ
SHOW PROCESSLIST
またはコマンドラインから
:mysqladmin processlist
また、最も強力な方法は、の「実行」メソッドをオーバーライドすることですActiveRecord :: Base接続インスタンスあなたはapplication.rbにこのコードを入れ
http://www.misuse.org/science/2006/12/12/sql-logging-in-rails/
:この記事では一般的なアプローチを示して
# define SQL_LOG_FILE, SQL_LOG_MAX_LINES
connection = ActiveRecord::Base.connection
class << connection
alias :original_exec :execute
def execute(sql, *name)
# try to log sql command but ignore any errors that occur in this block
# we log before executing, in case the execution raises an error
begin
lines = if File::exists?(SQL_LOG_FILE) then IO::readlines(SQL_LOG_FILE) else [] end
log = File.new(SQL_LOG_FILE, "w+")
# keep the log to specified max lines
if lines.length > SQL_LOG_MAX_LINES
lines.slice!(0..(lines.length-SQL_LOG_MAX_LINES))
end
lines << Time.now.strftime("%x %I:%M:%S %p")+": "+sql+"n"
log.write(lines)
log.close
$sql_log = sql
rescue Exception => e
;
end
# execute original statement
original_exec(sql, *name)
end # def execute
end # class <<
2
あなたは
show processlist;
コマンドで/未完成の文を実行しているを見てみることができます。
5
私はこれにはいくつかの選択肢があると思います。最初は、あなたのdevelopment.logを実際に見て、それを引き起こしているアクションを見ています。レールの実行を求めるクエリを見て、その特定のクエリを特定しようとします。大量の時間がかかる場合は、おそらく、n + 1回のクエリを返したり、インデックスやその他のパフォーマンスを低下させるようなことをしていることを意味します。
devログには終了したクエリしかないと言います。次のクエリを実行するにはどうすればいいですか?
あなたの他のオプションは、ログ(私はこれらのいくつかの名前が変更されていると思います)でmysqldを開始伴う:
のmysql内からPROCESSLISTを使用して、現在のステートメントのリストを表示mysqld --log[=file_name] --log-slow-queries[=file_name]
:
show processlist;
このようなことが起こらないようにするには、New Relic(http://www.newrelic.com/)のRPMのようなレール性能モニタを見るのに時間がかかるかもしれません。
こちらがお役に立てば幸いです。あなたは、MySQLに評価している場合
関連する問題
- 1. クエリの実行
- 2. クエリの実行
- 3. IF条件実行クエリの実行、その他のクエリの実行
- 4. Oracle SQLクエリのログ
- 5. Codeigniterの前のクエリの結果に基づいてクエリを実行します。
- 6. SPARQLクエリの実行
- 7. クエリ - 実行
- 8. DataMapperクエリの自動ログ
- 9. mysql動的クエリの実行
- 10. Postgresクエリの実行時間
- 11. Runtime.getRuntime()。exec - osqlクエリの実行
- 12. クエリの実行--- Hibernate + Spring
- 13. Mysqlクエリの実行順序
- 14. ビュー実行前
- 15. PCA実行前後のデータサイズ
- 16. 実行前のAIRネイティブプロセスインストール
- 17. クエリ実行前にMySQlクエリタイプを見つける方法Zend framework
- 18. 実行エラーSQLクエリ
- 19. Qtクエリ実行エラー
- 20. どのように私はNUnitののReSharperの実行ログが
- 21. MySQLの低速クエリログ高速クエリのログ
- 22. 実行前と実行後の条件付きでの実行中
- 23. アクションのログの実装
- 24. 日付の前に列を削除するSQLクエリを実行します。
- 25. クエリ実行中の "IN"の問題
- 26. リモートコンピュータからのSQL Serverクエリの実行
- 27. のTransact SQLクエリの並列実行
- 28. Oracleの11グラムR2 SEの実行クエリ
- 29. TFSでのMDXクエリの実行
- 30. MYSQLの並列クエリの実行
合意 - devのを見て、これはすべき、あなたが呼び出されたコントローラメソッド見ることができますログインしますどのモデルを見るか教えてください。その時点で、必要に応じてログを追加して、どのクエリを実行しようとしているかを伝えることができます。 –