mysqlnd_qc_get_query_trace_log
(PECL mysqlnd_qc >= 1.0.0)
mysqlnd_qc_get_query_trace_log — Retourne une trace pour chaque requête inspectée par la mise en cache de requêtes
Description
Retourne une trace pour chaque requête inspectée par la mise en cache de requêtes. La collection de traces est désactivée par défaut. Pour collecter des traces, vous devez définir la directive de configuration PHP mysqlnd_qc.collect_query_trace à 1
La profondeur maximale des traces est limitée à la profondeur définie par la directive de configuration PHP mysqlnd_qc.query_trace_bt_depth.
Liste de paramètres
Cette fonction ne contient aucun paramètre.
Valeurs de retour
Un tableau de traces des requêtes. Chaque entrée de la liste contient la chaîne de requête, une trace ainsi que quelques informations détaillées.
| Clé | Description | 
|---|---|
| query | La chaîne représentant la requête. | 
| origin | Le code de la trace. | 
| run_time | Durée d'exécution de la requête, en millisecondes. La collection de toutes les durées ainsi que les appels nécessaires à la fonction système gettimeofday peuvent être désactivés en définissant la directive de configuration PHP mysqlnd_qc.time_statistics à 0. | 
| store_time | Durée de stockage du jeu de résultats de la requêtes, en millisecondes. La collection de toutes les durées ainsi que les appels nécessaires à la fonction système gettimeofday peuvent être désactivés en définissant la directive de configuration PHP mysqlnd_qc.time_statistics à 0. | 
| eligible_for_caching | TRUEsi la requête est éligible à la mise en cache,FALSEsinon. | 
| no_table | TRUEsi la requête a généré un jeu de résultats et au moins, une
       colonne du jeu de résultats n'a pas de nom de table de défini dans
       ces méta-données. C'est généralement le cas avec les requêtes
       qui ne doivent pas être mises en cache, comme
       SELECT SLEEP(1). Par défaut, ce genre de requêtes
       ne sera pas ajouté au cache. Voir aussi la directive de configuration
       PHP mysqlnd_qc.cache_no_table. | 
| was_added | TRUEsi le résultat de la requête a été ajouté au cache,FALSEsinon. | 
| was_already_in_cache | TRUEsi le résultat de la requête aurait été mise en cache
       si elle n'y était pas déjà présente,FALSEsinon. | 
Exemples
Exemple #1 Exemple avec mysqlnd_qc_get_query_trace_log()
<?php
/* Connexion, création et population 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 mis en cache */
$res = $mysqli->query("SELECT id FROM test WHERE id = 1");
var_dump($res->fetch_assoc());
$res->free();
/* Mis 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éré 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_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(6) {
  [0]=>
  array(8) {
    ["query"]=>
    string(25) "DROP TABLE IF EXISTS test"
    ["origin"]=>
    string(102) "#0 qc.php(4): mysqli->query('DROP TABLE IF E...')
#1 {main}"
    ["run_time"]=>
    int(0)
    ["store_time"]=>
    int(0)
    ["eligible_for_caching"]=>
    bool(false)
    ["no_table"]=>
    bool(false)
    ["was_added"]=>
    bool(false)
    ["was_already_in_cache"]=>
    bool(false)
  }
  [1]=>
  array(8) {
    ["query"]=>
    string(25) "CREATE TABLE test(id INT)"
    ["origin"]=>
    string(102) "#0 qc.php(5): mysqli->query('CREATE TABLE te...')
#1 {main}"
    ["run_time"]=>
    int(0)
    ["store_time"]=>
    int(0)
    ["eligible_for_caching"]=>
    bool(false)
    ["no_table"]=>
    bool(false)
    ["was_added"]=>
    bool(false)
    ["was_already_in_cache"]=>
    bool(false)
  }
  [2]=>
  array(8) {
    ["query"]=>
    string(36) "INSERT INTO test(id) VALUES (1), (2)"
    ["origin"]=>
    string(102) "#0 qc.php(6): mysqli->query('INSERT INTO tes...')
#1 {main}"
    ["run_time"]=>
    int(0)
    ["store_time"]=>
    int(0)
    ["eligible_for_caching"]=>
    bool(false)
    ["no_table"]=>
    bool(false)
    ["was_added"]=>
    bool(false)
    ["was_already_in_cache"]=>
    bool(false)
  }
  [3]=>
  array(8) {
    ["query"]=>
    string(32) "SELECT id FROM test WHERE id = 1"
    ["origin"]=>
    string(102) "#0 qc.php(9): mysqli->query('SELECT id FROM ...')
#1 {main}"
    ["run_time"]=>
    int(0)
    ["store_time"]=>
    int(25)
    ["eligible_for_caching"]=>
    bool(false)
    ["no_table"]=>
    bool(false)
    ["was_added"]=>
    bool(false)
    ["was_already_in_cache"]=>
    bool(false)
  }
  [4]=>
  array(8) {
    ["query"]=>
    string(41) "/*qc=on*/SELECT id FROM test WHERE id = 2"
    ["origin"]=>
    string(103) "#0 qc.php(14): mysqli->query('/*qc=on*/SELECT...')
#1 {main}"
    ["run_time"]=>
    int(311)
    ["store_time"]=>
    int(13)
    ["eligible_for_caching"]=>
    bool(true)
    ["no_table"]=>
    bool(false)
    ["was_added"]=>
    bool(true)
    ["was_already_in_cache"]=>
    bool(false)
  }
  [5]=>
  array(8) {
    ["query"]=>
    string(41) "/*qc=on*/SELECT id FROM test WHERE id = 2"
    ["origin"]=>
    string(103) "#0 qc.php(19): mysqli->query('/*qc=on*/SELECT...')
#1 {main}"
    ["run_time"]=>
    int(13)
    ["store_time"]=>
    int(8)
    ["eligible_for_caching"]=>
    bool(true)
    ["no_table"]=>
    bool(false)
    ["was_added"]=>
    bool(false)
    ["was_already_in_cache"]=>
    bool(true)
  }
}
Voir aussi
- Configuration à l'exécution
- mysqlnd_qc.collect_query_trace
- mysqlnd_qc.query_trace_bt_depth
- mysqlnd_qc.time_statistics
- mysqlnd_qc.cache_no_table
- 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
