У меня возникла проблема, когда я запускаю некоторый запрос, и процесс mysqld начинается с 100% -ной мощности ЦП, не заканчивая. Я хочу точно определить этот запрос. Проблема в том, что log/development.log содержит только завершенные запросы. Есть идеи?Запрос журнала перед его выполнением
ответ
Если у вас есть оценки в MySQL, рассмотрим запрос SQL
SHOW PROCESSLIST
Или из командной строки:
mysqladmin processlist
Альтернативно, самый мощный способ является переопределить метод «выполнить» из экземпляр ActiveRecord :: Base. В данной статье показан общий подход:
http://www.misuse.org/science/2006/12/12/sql-logging-in-rails/
Вы поместите этот код в application.rb:
# 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 <<
Вы могли бы взглянуть на бегу/незаконченных утверждений с помощью команды
show processlist;
.
Я думаю, у вас есть несколько вариантов этого. Первый действительно рассматривает ваш development.log и видит, какие действия его вызывают. Взгляните на запросы, которые вы запрашиваете для запуска рельсов, и попытайтесь определить этот конкретный запрос. Если это занимает много времени, это, вероятно, означает, что вы делаете что-то вроде возврата n + 1 запросов, отсутствующих индексов или другого убийцы производительности.
Вы говорите, что в журнале разработчиков есть только завершенные запросы. Разве вы не можете решить, что будет делать следующий запрос?
другие Ваши варианты включают начиная туздЫ с бревном (я думаю, что имена некоторых из них изменились):
mysqld --log[=file_name] --log-slow-queries[=file_name]
Отображение текущего списка выписки по PROCESSLIST внутри MySQL:
show processlist;
Чтобы предотвратить повторение подобных событий, вы также можете потратить некоторое время на просмотр монитора производительности рельсов, например, RPM от New Relic (http://www.newrelic.com/).
Надеюсь, это поможет!
- 1. Перестроить запрос перед выполнением
- 2. Doctrine изменить запрос перед выполнением
- 3. Yii Как отобразить обработанный запрос перед его выполнением
- 4. Apache solr проверяющий запрос перед выполнением его на solr
- 5. cakephp см. Скомпилированный SQL-запрос перед выполнением
- 6. Выполнение Bash-кода перед его выполнением
- 7. Usercript - Заменить другой Javascript перед его выполнением?
- 8. убил поток в python перед его выполнением
- 9. jQuery ~ Настройка href перед его выполнением
- 10. Завершить запрос getJSON перед выполнением следующей строки
- 11. Закажите sql-запрос перед выполнением оператора case
- 12. Остановка анимации перед выполнением
- 13. Перенаправление перед выполнением фиксации()
- 14. Mocha beforeEach перед выполнением
- 15. Проверка лицензии перед выполнением
- 16. Выполнение операторов перед выполнением
- 17. Ожидание перед выполнением istruction
- 18. Задержка перед выполнением javascript
- 19. Проверить условие перед выполнением
- 20. Подтвердить перед выполнением Javascript
- 21. Подтверждение запроса перед выполнением PHP
- 22. список файлов перед выполнением rm
- 23. браузер отправляет запрос HTTP перед выполнением «разгружать» обработчик
- 24. Изменение ползунка JQuery подождать полсекунды перед выполнением
- 25. Как получить имя потока AsyncTask перед его выполнением?
- 26. Как отредактировать вывод скрипта bash перед его выполнением?
- 27. Java & MySql - Как избежать запроса перед его выполнением
- 28. Узнайте текст запроса перед выполнением ExecuteNonQuery()
- 29. Как проверить состояние перед выполнением MYSQL запрос (Laravel 5)
- 30. Получение заголовков из Ruby Net :: HTTP-запрос перед выполнением запроса
Согласовано - посмотрев на разработчика журнала вы можете увидеть, какой метод управления был вызван, который должен скажите, на какую модель смотреть. В этот момент вы можете добавить журнал, если необходимо, чтобы указать, какой запрос будет запущен. –