Dans la programmation PHP, l'extension MySQLI est une méthode courante pour interagir avec les bases de données MySQL. Afin de déboguer les requêtes SQL, MySQLI fournit une méthode de débogage qui peut produire des informations de débogage détaillées. Cependant, dans certains cas, lorsque vous activez MySqli :: Debug , les performances du site Web peuvent subir une baisse significative. Alors, pourquoi cela se produit-il? Cet article analysera en détail les raisons pour lesquelles le site Web ralentit après avoir allumé MySqli :: Debug .
MySQLI :: Debug est une méthode utilisée pour activer le mode de débogage MySqli. Il vous permet d'obtenir des journaux plus détaillés sur les connexions de la base de données, l'exécution de la requête, les informations d'erreur et d'autres processus internes lors de l'exécution de requêtes. En débogues d'informations, les développeurs peuvent plus facilement découvrir des problèmes potentiels dans les opérations de base de données.
mysqli::debug("trace");
Après avoir appelé la méthode ci-dessus, tous les journaux de fonctionnement de la base de données seront sortis à l'emplacement spécifié (généralement le journal d'erreur PHP). Mais ce sont ces sorties de journaux détaillées qui peuvent entraîner des problèmes de performances sur le site Web.
Frais généraux supplémentaires pour la sortie du journal
Lorsque vous activez MySQLI :: Debug , l'extension MySQLI enregistre chaque requête et son temps d'exécution et diffuse ces informations dans le fichier journal. Pour chaque demande, MySQLI doit capturer les données de requête, l'état d'exécution, les informations d'erreur, etc. Ces opérations nécessitent elles-mêmes une certaine quantité de ressources informatiques, et la sortie du journal consommera davantage le temps d'opération d'E / S, en particulier lorsqu'un grand nombre de requêtes seront exécutées, ces frais généraux supplémentaires deviendront très significatifs, ce qui entraînera un temps de réponse prolongé.
Exemple de code:
mysqli::debug("trace");
$connection = new mysqli('m66.net', 'user', 'password', 'database');
$result = $connection->query("SELECT * FROM large_table");
Chaque fois qu'une requête est exécutée, MySQLI :: Debug enregistre des informations de débogage détaillées et les diffuse dans le fichier journal. Ceci est particulièrement perceptible pour les sites de demande à haute fréquence et peut entraîner une augmentation du temps de réponse.
Débogage fréquent des connexions et des requêtes de base de données
L'activation du mode de débogage signifie que les informations pertinentes seront enregistrées chaque fois qu'une base de données est connectée ou qu'une requête est exécutée. Lorsque vous visitez un site Web à fort trafic, les connexions de base de données et les opérations de requête se produisent fréquemment, ce qui fait de la sortie des informations de débogage un goulot d'étranglement des performances. Chaque fois qu'une requête SQL est effectuée, l'extension MySQLI effectue non seulement l'opération SQL elle-même, mais transmet également ces informations au fichier journal, ce qui ajoute un retard supplémentaire.
Les informations de débogage augmentent le fardeau de la base de données
Bien que MySQLI :: Debug n'étend que les informations de débogage, cela peut indirectement affecter les performances de la base de données. Par exemple, lorsque le journal de débogage est trop important, il peut provoquer trop d'opérations d'E / S, affectant la réponse de requête normale de la base de données. Il s'agit également d'une pression sur les performances de la base de données elle-même, en particulier lorsque la charge de base de données est élevée, le traitement et le stockage des informations de débogage peuvent rivaliser avec des opérations normales de base de données pour les ressources.
Les informations de débogage occupent un espace de disque
Une fois le débogage activé, la taille du fichier journal augmentera progressivement, en particulier lorsque les requêtes SQL sont exécutées fréquemment. Des fichiers journaux trop grands occuperont non seulement l'espace du disque du serveur, mais peuvent également conduire à un temps de lecture et d'écriture de journaux prolongés. S'il n'y a pas suffisamment d'espace disque, cela peut même entraîner d'autres problèmes de performances du système.
Problèmes de blocage et de synchronisation
Certaines informations de débogage sont enregistrées de manière synchrone dans le fichier journal, ce qui signifie que le programme peut être bloqué lors de l'enregistrement des informations de débogage. Bien qu'il s'agisse généralement d'une très petite latence, dans le cas d'une concurrence élevée, ces latence s'accumulent et provoquent une dégradation significative des performances.
Activez le débogage uniquement dans l'environnement de développement
La meilleure chose à faire est d'activer MySqli :: Debug uniquement dans l'environnement de développement ou de débogage, et de l'éteindre dans l'environnement de production. Vous pouvez vérifier les variables d'environnement de PHP pour décider d'activer le mode de débogage.
Exemple de code:
if ($_SERVER['SERVER_NAME'] === 'm66.net') {
mysqli::debug("trace");
}
De cette façon, les informations de débogage ne seront pas sorties dans l'environnement de production, évitant ainsi la dégradation des performances.
Utiliser d'autres outils de débogage
En plus de MySQLI :: Debug , vous pouvez également utiliser d'autres outils de surveillance des performances tels que XDEBUG ou des outils d'analyse de requête de base de données (tels que le journal de requête lent MySQL ). Ces outils peuvent vous aider à obtenir des informations de débogage sans affecter de manière significative les performances.
Limiter la taille du fichier journal
Si vous devez utiliser les journaux de débogage, envisagez régulièrement des fichiers de journal pour éviter qu'ils soient trop grands et occupez trop d'espace disque. Vous pouvez définir l'option de configuration log_errors_max_len pour PHP pour limiter la longueur maximale des entrées de journal, ou utiliser l'outil de gestion du journal pour gérer les fichiers journaux.
Optimiser les performances de la requête
Enfin, il est également très important d'optimiser eux-mêmes les requêtes de base de données. En réduisant les requêtes inutiles, en optimisant les instructions de requête, en utilisant des index et d'autres moyens, la charge de la base de données peut être réduite, réduisant ainsi indirectement l'impact des performances des informations de débogage.
L'activation de MySqli :: Debug a un impact sur les performances du site Web, en particulier lorsque des opérations à base de base de données élevées ou fréquentes sont effectuées. L'enregistrement et la sortie des informations de débogage ajouteront un calcul supplémentaire et une surcharge d'opération d'E / S, ce qui affectera le temps de réponse. Par conséquent, il est recommandé que les développeurs désactivent le mode de débogage dans les environnements de production et utilisent d'autres outils pour obtenir l'analyse des performances et les informations d'erreur pendant le débogage. Cela garantit non seulement le fonctionnement normal du site Web, mais évite également les pertes de performances inutiles.