The PHP Online Conference 2021

mysqlnd_qc_get_query_trace_log

(PECL mysqlnd_qc >= 1.0.0)

mysqlnd_qc_get_query_trace_logDevuelve información de rastreo para cada consulta inspeccionada por la caché de consultas

Descripción

mysqlnd_qc_get_query_trace_log ( void ) : array

Devuelve un informe de rastreo para cada consulta inspeccionada por la caché de consultas. La recopilación de información de rastreo está deshabilitada de forma predeterminada. Para recopilar de información de rastreo se ha de establecer la directiva de configuración de PHP mysqlnd_qc.collect_query_trace a 1

La profundidad máxima de la búsqueda de rastreo está limitada por la profundidad establecida con la directiva de configuración de PHP mysqlnd_qc.query_trace_bt_depth.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Un array de información de rastreo de consultas. Cada entrada de la lista contiene la cadena de consulta, información de rastreo y más información detallada.

Clave Descripción
query La cadena de consulta.
origin El código de la información de rastreo.
run_time El tiempo de ejecución de la consulta en milisegundos. La recopilación de todos los tiempos y las llamadas al sistema de gettimeofday necesarias se pueden deshabilitar estableciendo la directiva de configuración de PHP mysqlnd_qc.time_statistics a 0
store_time El tiempo de almacenamiento del conjunto de resultados de la consultas en milisegundos. La recopilación de todos los tiempos y las llamadas al sistema de gettimeofday necesarias se pueden deshabilitar estableciendo la directiva de configuración de PHP mysqlnd_qc.time_statistics a 0
eligible_for_caching TRUE si la consulta es almacenable en caché, FALSE si no.
no_table TRUE si la consulta ha generado un conjunto de resultados y al menos una columna del mismo no tiene un nombre de tabla establecido en sus metadatos. Éste normalmente es el caso de las consultas que no probablemente no se quieran almacenar en caché, tales como SELECT SLEEP(1). Por omisión, tales consultas no serán añadidas a la caché. Véase también la directiva de configuración de PHP mysqlnd_qc.cache_no_table.
was_added TRUE si el resultado de la consulta se ha colocado en la caché, FALSE si no.
was_already_in_cache TRUE si el resultado de la consulta habría sido añadido a la caché si ya no estuviera en ella (coincidencia con la caché). De lo contrario FALSE.

Ejemplos

Ejemplo #1 Ejemplo de mysqlnd_qc_get_query_trace_log()

mysqlnd_qc.collect_query_trace=1
<?php
/* Conectar, crear y rellenar la tabla test */
$mysqli = new mysqli("host""usuario""contraseña""esquema""puerto""socket");
$mysqli->query("DROP TABLE IF EXISTS test");
$mysqli->query("CREATE TABLE test(id INT)");
$mysqli->query("INSERT INTO test(id) VALUES (1), (2)");

/* no almacenada en caché */
$res $mysqli->query("SELECT id FROM test WHERE id = 1");
var_dump($res->fetch_assoc());
$res->free();

/* colocada en la caché */
$res $mysqli->query("/*" MYSQLND_QC_ENABLE_SWITCH "*/" "SELECT id FROM test WHERE id = 2");
var_dump($res->fetch_assoc());
$res->free();

/* coincidencia con la caché */
$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());
?>

El resultado de los ejemplos sería:

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)
  }
}

Ver también

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top