mysqlnd _qc _get _normalized _query _trace _log
(PECL mysqlnd_qc >= 1.0.0)
mysqlnd_qc_get_normalized_query_trace_log — Retourne une trace dans les logs d'une requête normalisée pour chaque requête inspectée par le cache de requêtes
Description
Retourne une trace dans les logs d'une requête normalisée pour chaque requête inspectée par le cache de requêtes. La collection de trace de logs est désactivée par défaut. Pour collecter les traces de log, vous devez définir la directive de configuration PHP mysqlnd_qc.collect_normalized_query_trace à 1.
Les entrées de trace de logs sont groupées par requête normalisée. La requête normalisée est la requête avec toutes les valeurs de paramètres de requête remplacées par un marqueur. Par exemple, les deux requêtes SELECT id FROM test WHERE id = 1 et SELECT id FROM test WHERE id = 2 sont normalisées en SELECT id FROM test WHERE id = ?. Chaque fois qu'une requête est inspectée par le cache de requête qui correspond au masque de requête normalisée, ses statistiques sont groupées par la chaîne de requête normalisée.
Valeurs de retour
Un tableau de log de requêtes. Chaque entrée contient la chaîne de requête normalisée en plus d'autres informations.
Clé | Description |
---|---|
query | Chaîne de requête normalisée. |
occurences | Le nombre de requêtes qui ont correspondu à la chaîne de requête normalisée en plus de celle qui a créée l'entrée du log. La valeur est zéro si une requête a été normalisée, sa représentation normalisée a été ajoutée au log mais qu'aucune autre requête inspectée par PECL/mysqlnd_qc n'avait la même chaîne de requête normalisée. |
eligible_for_caching | Si la requête doit être mise en cache ou non. Une requête éligible pour la mise en cache ne sera pas nécessairement mise en cache. Il n'est pas possible de dire avec certitude si et combien de requêtes mises en cache a contribué à l'aggrégation de l'entrée du log de requête normalisée. Cependant, la comparaison du temps minimum d'exécution et du temps moyenne d'exécution permet de faire une supposition relativement juste. |
avg_run_time | La durée d'exécution moyen de toutes les requêtes ayant contribuées à l'entrée du log. La durée d'exécution est le temps entre l'envoi de la requête à MySQL et la réception de la réponse depuis MySQL. |
avg_store_time | La durée moyenne de stockage de toutes les requêtes ayant contribuées à l'entrée du log. La durée de stockage est le temps nécessaire pour récupérer un jeu de résultats d'une requête depuis le serveur vers le client, et le stocker sur le client. |
min_run_time | La durée minimale d'exécution de toutes les requêtes ayant contribuées à l'entrée du log. |
min_store_time | La durée minimale de stockage de toutes les requêtes ayant contribuées à l'entrée du log. |
max_run_time | La durée maximale d'exécution de toutes les requêtes ayant contribuées à l'entrée du log. |
max_store_time | La durée maximale de stockage de toutes les requêtes ayant contribuées à l'entrée du log. |
Exemples
mysqlnd_qc.collect_normalized_query_trace=1
<?php
/* Connexion, création et peuplement de la table test */
$mysqli = new mysqli("host", "user", "password", "schema", "port", "socket");
$mysqli->query("DROP TABLE IF EXISTS test");
$mysqli->query("CREATE TABLE test(id INT)");
$mysqli->query("INSERT INTO test(id) VALUES (1), (2)");
/* Non mise en cache */
$res = $mysqli->query("SELECT id FROM test WHERE id = 1");
var_dump($res->fetch_assoc());
$res->free();
/* Mise en cache */
$res = $mysqli->query("/*" . MYSQLND_QC_ENABLE_SWITCH . "*/" . "SELECT id FROM test WHERE id = 2");
var_dump($res->fetch_assoc());
$res->free();
/* Récupération depuis le cache */
$res = $mysqli->query("/*" . MYSQLND_QC_ENABLE_SWITCH . "*/" . "SELECT id FROM test WHERE id = 2");
var_dump($res->fetch_assoc());
$res->free();
var_dump(mysqlnd_qc_get_normalized_query_trace_log());
?>
Les exemples ci-dessus vont afficher :
array(1) { ["id"]=> string(1) "1" } array(1) { ["id"]=> string(1) "2" } array(1) { ["id"]=> string(1) "2" } array(4) { [0]=> array(9) { ["query"]=> string(25) "DROP TABLE IF EXISTS test" ["occurences"]=> int(0) ["eligible_for_caching"]=> bool(false) ["avg_run_time"]=> int(0) ["min_run_time"]=> int(0) ["max_run_time"]=> int(0) ["avg_store_time"]=> int(0) ["min_store_time"]=> int(0) ["max_store_time"]=> int(0) } [1]=> array(9) { ["query"]=> string(27) "CREATE TABLE test (id INT )" ["occurences"]=> int(0) ["eligible_for_caching"]=> bool(false) ["avg_run_time"]=> int(0) ["min_run_time"]=> int(0) ["max_run_time"]=> int(0) ["avg_store_time"]=> int(0) ["min_store_time"]=> int(0) ["max_store_time"]=> int(0) } [2]=> array(9) { ["query"]=> string(40) "INSERT INTO test (id ) VALUES (? ), (? )" ["occurences"]=> int(0) ["eligible_for_caching"]=> bool(false) ["avg_run_time"]=> int(0) ["min_run_time"]=> int(0) ["max_run_time"]=> int(0) ["avg_store_time"]=> int(0) ["min_store_time"]=> int(0) ["max_store_time"]=> int(0) } [3]=> array(9) { ["query"]=> string(31) "SELECT id FROM test WHERE id =?" ["occurences"]=> int(2) ["eligible_for_caching"]=> bool(true) ["avg_run_time"]=> int(159) ["min_run_time"]=> int(12) ["max_run_time"]=> int(307) ["avg_store_time"]=> int(10) ["min_store_time"]=> int(8) ["max_store_time"]=> int(13) } }
Voir aussi
- Configuration de l'exécution
- mysqlnd_qc.collect_normalized_query_trace
- mysqlnd_qc.time_statistics
- mysqlnd_qc_get_query_trace_log() - Retourne une trace pour chaque requête inspectée par la mise en cache de requêtes
Version en cache
23/11/2024 20:47:27 Cette version de la page est en cache (à la date du 23/11/2024 20:47:27) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-mysqlnd-qc-get-normalized-query-trace-log.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.