Bei der täglichen PHP -Entwicklung sind Datenbankleistungsprobleme häufig am problematischsten, insbesondere die zeitweiligen Zeitlimitprobleme, die es den Entwicklern häufig erschweren, sich schnell zu lokalisieren. Glücklicherweise bietet die MySQLI -Erweiterung von PHP ein leistungsstarkes Tool - MySQLI :: Debug , das uns helfen kann, detaillierte Datenbankbetriebsprotokolle aufzuzeichnen, wodurch langsame Abfrage- oder Verbindungsprobleme analysiert werden und schnell Leistungsengpässe finden.
Mysqli :: Debug ist eine Methode in der MySQLI -Klasse, die die Debug -Protokollierung ermöglicht. Diese Methode zeichnet in einer Protokolldatei in verwandte MySQL -Client -Operationen auf und hilft bei der Fehlerbehebung von Ausnahmen oder Leistungsproblemen während der Verbindung, der SQL -Ausführung.
mysqli::debug(string $debug_options): bool
Diese Methode wird normalerweise vor einer Datenbankverbindung aufgerufen und erfordert, dass der MySQLND -Treiber zur PHP -Kompilierungszeit aktiviert ist und das Debugging zulässt.
Um MySQLI :: Debug zu verwenden, müssen Sie sicherstellen, dass Sie sicherstellen:
PHP verwendet MySQLND -Treiber <br> Sie können bestätigen, indem Sie phpinfo () betrachten:
phpinfo();
Suchen Sie nach MySQLND , wenn Sie die folgenden Wörter sehen, bedeutet dies, dass Sie aktiviert haben:
Client API library version => mysqlnd 8.x.x
Ändern Sie die Konfiguration von Php.ini, um das Debugging zu aktivieren
mysqlnd.debug = "/tmp/mysqlnd.log"
Starten Sie nach der Änderung den PHP-FPM- oder Apache-Dienst neu.
Rufen Sie in Ihrem PHP -Skript MySQLI :: Debug () auf und erstellen Sie dann die Datenbankverbindung und führen Sie die Abfrage normal aus. Zum Beispiel:
<?php
// Aktivieren Sie die Debug -Protokollierung
mysqli::debug("d:t:o,/tmp/mysqlnd.log");
// Datenbankverbindung
$mysqli = new mysqli("localhost", "db_user", "db_pass", "db_name");
if ($mysqli->connect_errno) {
echo "Verbindung ist fehlgeschlagen: " . $mysqli->connect_error;
exit();
}
// Eine Frage ausführen
$result = $mysqli->query("SELECT * FROM users WHERE status = 'active'");
while ($row = $result->fetch_assoc()) {
echo $row['username'] . "<br>";
}
$mysqli->close();
?>
In:
Debugging lenken
Tadd Timestamp
o,/tmp/mysqlnd.log gibt die Ausgabedatei an
Das Debug -Protokoll wird an den von Ihnen angegebenen Speicherort ausgegeben (z .
tail -f /tmp/mysqlnd.log
Gemeinsame Analysepunkte umfassen:
Verbraucht sich die Verbindungszeit?
Ob die Anweisung für Abfragen wiederholt ausgeführt wird
Abfrage Wenn ein Cache -Treffer vorliegt
Langsame Abfrage braucht Zeit
Mit der Analyse von SQL -Anweisungen können Sie genauer bestimmen, ob Sie den Index optimieren oder die volle Tabellenscannung vermeiden müssen.
Obwohl MySQLI :: Debug reichhaltige Kundeninformationen liefert, erfordert eine tiefere langsame Abfrageanalyse auch MySQLs eigenes langsames Abfrageprotokoll:
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
Langsame Abfrageprotokolle in Kombination mit MySQLI :: Debugs Kundenprotokollen können in Zusammenarbeit von beiden Enden analysiert werden, um Engpässe schnell zu finden.
Aus Leistung und Sicherheitsgründen sollte das Debuggen in der Entwicklung oder in Testumgebungen verwendet werden. Denken Sie daran, es nach dem Debuggen zu schließen:
mysqli::debug(""); // Löschen Sie die Debugging -Parameter, die dem Herunterfahren entsprechen
Durch MySQLI :: Debug können wir den Interaktionsprozess zwischen PHP -Skripten und MySQL genau aufzeichnen und analysieren, was für die Behandlung von Datenbankverbindungsproblemen, intermittierende Zeitüberschreitungen und langsame Analysen von Abfragen von großem Wert ist. Wenn Sie dieses Tool während der Entwicklungsphase gut nutzen, kann die Wahrscheinlichkeit, dass Sie nach dem Start der Mine "auf die Mine treten", erheblich verringern.