(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
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.
Cette fonction ne contient aucun paramètre.
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. |
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) } }