Ich habe ein Problem, wo ich eine Abfrage ausführen und ein mysqld-Prozess beginnt mit 100% CPU-Leistung, ohne zu beenden. Ich möchte diese Abfrage genau lokalisieren. Das Problem ist, dass log/development.log nur Abfragen enthält, die beendet wurden. Irgendeine Idee?Log-Abfrage vor der Ausführung
Antwort
Wenn Sie MySQL beurteilen zu können, sollten Sie die SQL-Abfrage
SHOW PROCESSLIST
Oder von der Kommandozeile:
mysqladmin processlist
Alternativ kann der beste Weg ist, um die ‚ausführen‘ Methode außer Kraft setzen die ActiveRecord :: Base-Verbindungsinstanz. Dieser Artikel zeigt den allgemeinen Ansatz:
http://www.misuse.org/science/2006/12/12/sql-logging-in-rails/
Sie diesen Code in application.rb setzen:
# 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 <<
Sie können einen Blick auf Laufen/unfertig Aussagen nehmen über den
show processlist;
Befehl.
Ich denke, Sie haben ein paar Möglichkeiten dafür. Die erste sieht sich wirklich Ihr Development.log an und sieht, welche Aktionen es verursachen. Sehen Sie sich die Abfragen an, nach denen Sie rails suchen, und versuchen Sie, diese bestimmte Abfrage genau zu lokalisieren. Wenn es viel Zeit in Anspruch nimmt, bedeutet das wahrscheinlich, dass Sie so etwas wie das Zurückgeben von n + 1-Abfragen, fehlenden Indizes oder eines anderen Performance-Mörders tun.
Sie sagen, dass das Dev-Protokoll nur Abfragen hat, die abgeschlossen sind. Können Sie nicht herausfinden, was die nächste Abfrage wäre?
Weitere Optionen beinhalten das Start mysqld mit einem log (ich glaube, die Namen einiger dieser geändert haben):
mysqld --log[=file_name] --log-slow-queries[=file_name]
die aktuelle Anweisungsliste angezeigt PROCESS mit aus mysql:
show processlist;
Um zu verhindern, dass so etwas wieder passiert, könntest du dir auch etwas Zeit nehmen, um einen Schienenleistungsmonitor wie RPM von New Relic (http://www.newrelic.com/) zu betrachten.
Ich hoffe, das hilft!
- 1. Load Umgebungsvariable vor der Ausführung
- 2. Überprüfung der sp_send_email-Berechtigung vor der Ausführung
- 3. Umleiten vor begehen Ausführung()
- 4. PowerShell Versionsüberprüfung vor der Ausführung des Skripts
- 5. Mocha beforeEach vs vor der Ausführung
- 6. Intensität der Abfrage der Hive-Abfrage vor der Ausführung
- 7. wie man eine Sekunde wartet vor der Ausführung der Funktion
- 8. Wie erfolgt eine korrekte Verzögerung vor der Ausführung der Funktion?
- 9. cakephp siehe die kompilierte SQL-Abfrage vor der Ausführung
- 10. Python-Skript warten vor der Ausführung ein anderes Skript
- 11. Docker mount passiert vor oder nach der Ausführung des Einstiegspunkts
- 12. Warum entdeckt Python vor der Ausführung keine Fehler?
- 13. Test jpql Abfrage vor der Ausführung in Jpa
- 14. 301 Weiterleitung nach einer Route, aber vor der Controller-Ausführung
- 15. Winkelmesser-Gurke BDD-Tests Pass vor der Ausführung anzeigen
- 16. Apache Solr verifizieren Abfrage vor der Ausführung auf solr
- 17. Code außerhalb in for Schleife Ausführung vor der Ausführung in node.js
- 18. SCONs seltsame Reihenfolge der Ausführung
- 19. RegisterStartupScript und Reihenfolge der Ausführung
- 20. SQL Tipp zum Laden der gesamten Tabelle in den RAM vor der Ausführung?
- 21. Wie finde ich den MySql-Abfragetyp vor der Ausführung der Abfrage? Zend framework
- 22. Wie verbinde ich mich mit der DB vor der Ausführung des Bootstrap in Zend Framework
- 23. NodeJS: Warten auf andere Methoden vor beenden Ausführung
- 24. Problem in Interceptor Ausführung vor Aktion in Struts2
- 25. Konfigurieren der Reihenfolge der JmsListener-Ausführung
- 26. php Reihenfolge der Ausführung
- 27. Einmalige Ausführung der Funktion
- 28. Serielle Ausführung der Zusage
- 29. vor der Aktion in Laravel 5.1
- 30. SQL Server-Trigger - Reihenfolge der Ausführung
vereinbart - durch im Entwickler log suchen Sie sehen können, welche Controller-Methode aufgerufen wurde, das sollte sagen Sie, welches Modell zu betrachten ist. Zu diesem Zeitpunkt können Sie die Protokollierung bei Bedarf hinzufügen, um Ihnen mitzuteilen, welche Abfrage ausgeführt werden soll. –