Position actuelle: Accueil> Derniers articles> Mysqli :: Debug affecte-t-il les performances? Partage de données de test réel

Mysqli :: Debug affecte-t-il les performances? Partage de données de test réel

M66 2025-05-31

MySQLI :: Debug () est un outil très utile lors du débogage des problèmes de connexion de la base de données ou de l'analyse des requêtes lentes. Mais affectera-t-il les performances de l'application? C'est une question dont les développeurs se soucient souvent. Cet article effectuera une analyse quantitative de l'impact des performances de MySqli :: Debug () via le code de test PHP réel.

Qu'est-ce que MySqli :: Debug

MySQLI :: Debug (String $ debug_options) est une fonction de débogage fournie par l'extension MySQLI de PHP. Il peut être utilisé pour activer la sortie de débogage client et écrire dans les fichiers journaliers. Ces informations de débogage sont souvent très utiles pour le développement et le dépannage, mais peuvent également affecter l'efficacité de l'exécution due aux écritures de disque et à la génération de journaux supplémentaires.

Environnement d'essai

  • Version PHP: 8.2

  • Base de données: MySQL 8.0

  • Système d'exploitation: Ubuntu 22.04

  • Méthode de test: utilisez la même requête SQL et exécutez 10 000 fois avec MySQLI :: Debug activé et non activé respectivement, ce qui prend relativement le temps.

Code de test

 <?php
$host = 'localhost';
$user = 'root';
$password = 'your_password';
$dbname = 'test_db';

// Fonction de test
function test_query_performance($use_debug = false) {
    global $host, $user, $password, $dbname;

    if ($use_debug) {
        mysqli::debug("d:t:o,/tmp/client.trace");
    }

    $mysqli = new mysqli($host, $user, $password, $dbname);

    if ($mysqli->connect_error) {
        die("Échec de la connexion: " . $mysqli->connect_error);
    }

    $start = microtime(true);
    for ($i = 0; $i < 10000; $i++) {
        $result = $mysqli->query("SELECT 1");
        if (!$result) {
            die("La requête a échoué: " . $mysqli->error);
        }
    }
    $end = microtime(true);

    $mysqli->close();
    return $end - $start;
}

// Tester et sortir les résultats
$time_without_debug = test_query_performance(false);
echo "Non activé mysqli::debug Prend du temps: " . $time_without_debug . " Deuxième\n";

$time_with_debug = test_query_performance(true);
echo "Ouvrir mysqli::debug Prend du temps: " . $time_with_debug . " Deuxième\n";

echo "Différences de performance: " . ($time_with_debug - $time_without_debug) . " Deuxième\n";
?>

Exemple de résultats de test (peut être différent dans différents environnements)

 Non activé mysqli::debug Prend du temps: 0.75 Deuxième
Ouvrir mysqli::debug Prend du temps: 2.93 Deuxième
Différences de performance: 2.18 Deuxième

analyser

À en juger par les résultats des tests, MySQLI :: Debug augmentera considérablement le temps qui prend du temps de la requête. Dans 10 000 requêtes, la fonction de débogage ajoute une surcharge supplémentaire d'environ 2 secondes, ce qui indique que son impact sur les performances ne peut être ignoré. La raison principale est qu'après le débogage activé, chaque opération de base de données sera enregistrée dans le fichier journal, impliquant des opérations d'E / S, ce qui augmente la charge du système.

suggestion

  • Utiliser uniquement pendant la phase de débogage : MySQLI :: Debug doit être désactivé dans les environnements de production pour éviter les frais généraux de performance inutiles.

  • Journaux conditionnels pour l'utilisation : Si vous avez besoin d'enregistrer des journaux, il est recommandé d'utiliser le système de journaux de couche d'application pour enregistrer des exceptions spécifiques ou des requêtes lentes.

  • Surveillance automatique Débogue alternative : vous pouvez envisager d'utiliser des outils professionnels tels que https://m66.net/onitoring pour la surveillance et l'analyse de la base de données.

en conclusion

MySqli :: Debug est un puissant outil de débogage, mais il peut également avoir un impact significatif sur les performances. Il doit être utilisé avec prudence selon le scénario réel pour éviter de s'allumer par défaut dans les environnements de production.