Position actuelle: Accueil> Derniers articles> Transition de MySQLI :: débogage vers des outils de débogage plus puissants (tels que XDebug + Mysql Slow Query Log)

Transition de MySQLI :: débogage vers des outils de débogage plus puissants (tels que XDebug + Mysql Slow Query Log)

M66 2025-05-31

Dans le développement quotidien de PHP, MySQLI :: Debug est généralement utilisé pour afficher simplement le processus de connexion de la base de données et les détails d'exécution. Il peut être suffisant au début du débogage, mais lorsque le projet devient progressivement plus compliqué, en s'appuyant uniquement sur MySqli :: Debug ne peut souvent pas répondre aux besoins en analyse approfondie des goulots d'étranglement de performance ou des requêtes complexes. Par conséquent, cet article vous mènera à travers la façon de passer en douceur de MySQLI :: Débogage à un outil de débogage plus puissant - XDebug et MySQL Slow Query Logs, améliorant ainsi systématiquement l'efficacité de débogage de la base de données.

1. Pourquoi mysqli :: débogage n'est-il pas assez?

La fonction de mysqli :: debug () est relativement simple. Il permet uniquement la sortie d'informations de débogage au niveau de la bibliothèque client MySQL, qui est utilisé pour enregistrer des informations de bas niveau telles que la connexion et l'exécution, mais:

  • Le temps d'exécution SQL n'est pas fourni ;

  • Pas facile de correspondre à la logique métier ;

  • Le contenu de sortie est désordonné et difficile à analyser ;

  • La pile d'appels ou l'utilisation de la mémoire ne peut pas être suivie automatiquement .

Exemple de code:

 mysqli::debug("d:t:o,/tmp/client.trace");
$db = new mysqli("localhost", "user", "password", "dbname");

Bien qu'il puisse être sorti vers /tmp/client.trace , la lecture et l'analyse sont inefficaces.

2. Xdebug: Déboggage au niveau du code + Analyse des performances

XDebug est l'une des extensions de débogage les plus puissantes de PHP, qui peuvent implémenter des fonctions avancées telles que le débogage des points d'arrêt, le traçage des appels de fonctions et l'analyse des performances.

Installez xdebug (en prenant PHP 8 comme exemple):

 pecl install xdebug

Puis ajouter en php.ini :

 zend_extension=xdebug
xdebug.mode=develop,trace,profile
xdebug.output_dir=/tmp

Profilage

Après avoir activé XDebug.Mode = Profil , chaque demande générera un fichier .cachegrind . Vous pouvez utiliser des outils tels que QCachegrind ou WebGrind pour ouvrir le temps d'exécution des fonctions d'analyse, y compris les fonctions de requête de base de données.

 $mysqli = new mysqli("localhost", "user", "password", "dbname");
$result = $mysqli->query("SELECT * FROM users WHERE email LIKE '%@m66.net'");

Vous pouvez clairement voir le temps qui prend du temps, l'emplacement d'appel et d'autres informations de Query () , qui est très adapté pour le dépannage des requêtes lentes qui sont fréquemment exécutées.

3. Journal de requête lente MySQL: Focus sur l'efficacité d'exécution SQL

Le journal de requête Slow MySQL est une fonction native de base de données qui enregistre les instructions SQL dont le temps d'exécution dépasse un seuil spécifié, ce qui est idéal pour analyser les goulots d'étranglement de la base de données.

Activer les journaux de requête lents (exemple mon.cnf):

 [mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1

Après la configuration, redémarrez le service MySQL:

 sudo systemctl restart mysql

Outils d'analyse recommandés:

  • MySqlDumpSLow : affichez rapidement la distribution de requête lente sur la ligne de commande;

  • PT-QUERY-DIGELT : Outils analytiques avancés fournis par Percona Toolkit;

  • Outils Web : vous pouvez également télécharger des journaux sur https://m66.net/analyze-log (par exemple, la page d'outil que vous avez construite vous-même) pour une analyse visuelle.

4. meilleures pratiques pour une utilisation combinée

  1. Étape de développement : utilisez XDebug pour afficher les relations d'appel et les appels de base de données;

  2. Phase de test : activer le mode de profilage XDEBUG pour l'échantillonnage des performances;

  3. Étape de production : activer les journaux de requête lente MySQL et analyse périodique;