In der täglichen PHP -Entwicklung wird MySQLi :: Debug in der Regel verwendet, um den Datenbankverbindungsprozess und die Ausführungsdetails einfach anzuzeigen. Es mag in der frühen Phase des Debuggens ausreichen, aber wenn das Projekt allmählich komplizierter wird, kann es ausschließlich auf MySQLI :: Debuggen angewiesen sind, die die detaillierten Analysebedürfnisse von Leistung Engpässen oder komplexen Fragen oft nicht erfüllen können. Daher führt Sie in diesem Artikel einen reibungslosen Übergang von MySQLI :: Debugg zu einem leistungsstärkeren Debugging -Tool - Xdebug und MySQL Slow Query -Protokolle, wodurch die Datenbank -Debugging -Effizienz systematisch verbessert wird.
Die Funktion von MySQLI :: Debug () ist relativ einfach. Es ermöglicht nur die Ausgabe von Debug-Informationen auf der Ebene der MySQL-Client-Bibliothek, mit der Informationen wie Verbindungen und Ausführung auf niedrige Ebene aufgezeichnet werden, jedoch:
SQL Ausführungszeit wird nicht bereitgestellt .
Nicht einfach der Geschäftslogik zu entsprechen ;
Der Ausgangsinhalt ist chaotisch und schwer zu analysieren .
Der Anrufstack oder die Speicherverwendung kann nicht automatisch verfolgt werden .
Beispielcode:
mysqli::debug("d:t:o,/tmp/client.trace");
$db = new mysqli("localhost", "user", "password", "dbname");
Obwohl es an /tmp/client.trace ausgegeben werden kann, sind Lesen und Analysen ineffizient.
XDEBUG ist eine der leistungsstärksten Debugging -Erweiterungen von PHP, die erweiterte Funktionen wie Breakpoint -Debugging, Funktionsanrufverfolgung und Leistungsanalyse implementieren können.
pecl install xdebug
Fügen Sie dann php.ini hinzu:
zend_extension=xdebug
xdebug.mode=develop,trace,profile
xdebug.output_dir=/tmp
Nach dem Einschalten von xDebug.mode = Profil generiert jede Anforderung eine .cachegrind -Datei. Sie können Tools wie QCACHEGRIND oder WebGrind verwenden, um die Ausführungszeit der Analysefunktion zu öffnen, einschließlich Datenbankabfragefunktionen.
$mysqli = new mysqli("localhost", "user", "password", "dbname");
$result = $mysqli->query("SELECT * FROM users WHERE email LIKE '%@m66.net'");
Sie können deutlich die zeitaufwändigen, aufgerufenen Standort und andere Informationen von Query () sehen, die sehr geeignet sind, um langsame Abfragen zu beheben, die häufig ausgeführt werden.
Das MySQL Slow Query -Protokoll ist eine natives Datenbankfunktion, die SQL -Anweisungen aufzeichnet, deren Ausführungszeit einen bestimmten Schwellenwert überschreitet, der ideal für die Analyse von Datenbank -Engpässen ist.
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
Starten Sie nach dem Einrichten den MySQL -Service neu:
sudo systemctl restart mysql
Mysqldumpslow : Zeigen Sie schnell die langsame Abfrageverteilung in der Befehlszeile an.
Pt-Quer-Digest : Erweiterte analytische Tools, die von Percona Toolkit bereitgestellt werden;
Web-Tools : Sie können auch Protokolle auf https://m66.net/analyze-log (z. B. die Tool-Seite, die Sie selbst erstellt haben) zur visuellen Analyse hochladen.
Entwicklungsstufe : Verwenden Sie XDebug, um Anrufbeziehungen und Datenbankanrufe anzuzeigen.
Testphase : Einschalten des XDEBUG -Profilierungsmodus für die Leistungsabtastung;
Produktionsstufe : Schalten Sie MySQL langsame Abfrageprotokolle und periodische Analyse ein;