Dans le développement quotidien de PHP, les problèmes de performance de la base de données sont souvent les plus gênants, en particulier ces problèmes de délai de délai intermittent, ce qui rend souvent difficile pour les développeurs de se localiser rapidement. Heureusement, l'extension MySQLI de PHP fournit un outil puissant - MySQLI :: Debug , qui peut nous aider à enregistrer des journaux de fonctionnement de la base de données détaillés, analysant ainsi profondément les problèmes de requête ou de connexion lents et de trouver rapidement des goulots d'étranglement de performances.
MySQLI :: Debug est une méthode de la classe MySQLI qui permet la journalisation de débogage. Cette méthode enregistre les opérations client MySQL dans un fichier journal, aidant à résoudre les exceptions ou les problèmes de performances lors de la connexion, exécution SQL.
mysqli::debug(string $debug_options): bool
Cette méthode est généralement appelée avant une connexion de base de données et nécessite que le pilote MySQLND soit activé au moment de la compilation PHP et que le débogage est configuré.
Pour utiliser MySqli :: Debug , vous devez vous assurer:
PHP utilise le pilote MySqlnd <br> Vous pouvez confirmer en regardant phpinfo () :
phpinfo();
Recherchez MySqlnd , si vous voyez les mots suivants, cela signifie que vous avez activé:
Client API library version => mysqlnd 8.x.x
Modifier la configuration php.ini pour permettre le débogage
mysqlnd.debug = "/tmp/mysqlnd.log"
Après modification, redémarrez le service PHP-FPM ou Apache.
Dans votre script PHP, appelez MySqli :: Debug () , puis créez la connexion de la base de données et exécutez la requête normalement. Par exemple:
<?php
// Activer la journalisation de débogage
mysqli::debug("d:t:o,/tmp/mysqlnd.log");
// Connexion de base de données
$mysqli = new mysqli("localhost", "db_user", "db_pass", "db_name");
if ($mysqli->connect_errno) {
echo "Échec de la connexion: " . $mysqli->connect_error;
exit();
}
// Exécuter une requête
$result = $mysqli->query("SELECT * FROM users WHERE status = 'active'");
while ($row = $result->fetch_assoc()) {
echo $row['username'] . "<br>";
}
$mysqli->close();
?>
dans:
débogage dénommé
horodatage
o, / tmp / mysqlnd.log spécifie le fichier de sortie
Le journal de débogage sera sorti à l'emplacement que vous avez spécifié (tel que /tmp/mysqlnd.log ), et vous pouvez afficher le contenu à l'aide de moins , de la queue ou de tout éditeur de texte.
tail -f /tmp/mysqlnd.log
Les points d'analyse courants comprennent:
La connexion prend du temps?
Si la déclaration de requête est exécutée à plusieurs reprises
Requête en cas de coup de cache
La requête lente prend du temps
Avec l'analyse Expliquez des instructions SQL, vous pouvez déterminer plus précisément si vous devez optimiser l'index ou éviter la numérisation complète du tableau.
Bien que MySQLI :: Debug fournit des informations sur les clients riches, une analyse de requête lente plus profonde nécessite également le propre journal de requête lent de MySQL:
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
Les journaux de requête lents combinés avec les journaux clients de MySQLI :: Debug peuvent être analysés en collaboration depuis les deux extrémités pour localiser rapidement les goulots d'étranglement.
Pour des raisons de performance et de sécurité, le débogage doit être utilisé dans les environnements de développement ou de test. N'oubliez pas de le fermer après le débogage:
mysqli::debug(""); // Effacer les paramètres de débogage égaux à l'arrêt
Grâce à MySQLI :: Debug , nous pouvons enregistrer et analyser avec précision le processus d'interaction entre les scripts PHP et MySQL, qui est d'une grande valeur pour gérer les problèmes de connexion de la base de données, les délais d'expiration intermittents et l'analyse de la requête lente. Faire bon usage de cet outil pendant la phase de développement peut réduire considérablement la probabilité de "marcher sur la mine" après son lancement.