mysqlnd_qc_get_normalized_query_trace_log

(PECL mysqlnd_qc >= 1.0.0)

mysqlnd_qc_get_normalized_query_trace_logDevuelve un registro de rastreo de consultas normalizadas para cada consulta inspeccionada por la caché de consultas

Descripción

mysqlnd_qc_get_normalized_query_trace_log ( void ) : array

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

Las entradas en el registro de rastreo están agrupadas por la sentencia de consulta normalizada. Dicha sentencia es la sentencia de consulta en donde todos los valores de sus parámetros han sido reemplazados por un signo de interrogación. Por ejemplo, Las dos sentencias SELECT id FROM test WHERE id = 1 y SELECT id FROM test WHERE id = 2 son normalizadas como SELECT id FROM test WHERE id = ?. Siempre que una sentencia sea inspeccionada por la caché de consultas y coincida con el patrón de sentencia normalizado, sus estadísticas son agrupadas por la cadena de sentencia normalizada.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Un array con el registro de consutas. Cada entrada de la lista contiene la cadena de consulta normalizada en información detallada.

Clave Descripción
query La cadena de sentencia normalizada.
occurences Cuántas sentencias han coincidido con la cadena de sentencia normalizada además de la que creó la entrada en el registro. Este valor es cero si una sentencia ha sido normalizada, su representación normalizada ha sido añadida al registro y ninguna consulta inspeccionada por PECL/mysqlnd_qc tiene la misma cadena de sentencia normalizada.
eligible_for_caching Si una sentencia podría ser almacenada en caché. Una sentencia candidata para ser almacenada en caché no tiene que ser almacenada necesariamente. No es posible indicar con certeza cuántas sentencias almacenadas en caché han contribuido a la entrada del registro de la sentencia normalizada acumulada. Sin embargo, comparando el tiempo de ejecución mínimo y medio se puede hacer una estimación fundamentada.
avg_run_time El tiempo de ejecución medio de todas las consultas que contribuyen a la entrada del registro. El tiempo de ejcución es el intervalo entre el envío de la sentencia de consulta a MySQL y el recibimiento de la respuesta desde MySQL.
avg_store_time El tiempo de almacenamiento medio de todas las consultas que contribuyen a la entrada del registro. El tiempo de almacenamiento es el tiempo necesario para obtener un conjunto de resultados de una sentencia desde el sevidor al cliente, y almacenarlo en el cliente.
min_run_time El tiempo de ejecución mínimo de todas las consultas que contribuyen a la entrada del registro.
min_store_time El tiempo de almacenamiento mínimo de todas las consultas que contribuyen a la entrada del registro.
max_run_time El tiempo de ejecución máximo de todas las consultas que contribuyen a la entrada del registro.
max_store_time El tiempo de almacenamiento máximo de todas las consultas que contribuyen a la entrada del registro.

Ejemplos

Ejemplo #1 Ejemplo de mysqlnd_qc_get_normalized_query_trace_log()

mysqlnd_qc.collect_normalized_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 almacenanda en caché */
$res $mysqli->query("SELECT id FROM test WHERE id = 1");
var_dump($res->fetch_assoc());
$res->free();

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

/* coincidencia en 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_normalized_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(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)
  }
}

Ver también