(PECL mysqlnd_qc >= 1.0.0)
mysqlnd_qc_get_normalized_query_trace_log — Devuelve un registro de rastreo de consultas normalizadas para cada consulta inspeccionada por la caché de consultas
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.
Esta función no tiene parámetros.
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. |
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ían:
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) } }