Fonctions mysqlnd_qc
PHP Manual

mysqlnd_qc_get_normalized_query_trace_log

(PECL mysqlnd_qc >= 1.0.0)

mysqlnd_qc_get_normalized_query_trace_logRetourne une trace dans les logs d'une requête normalisée pour chaque requête inspectée par le cache de requêtes

Description

array mysqlnd_qc_get_normalized_query_trace_log ( void )

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.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

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


Fonctions mysqlnd_qc
PHP Manual