get_connection_stats
Aprende a usar mysqli_get_connection_stats() en PHP para obtener estadísticas de una conexión MySQL: bytes transferidos, conteo de consultas y más.
La función mysqli_get_connection_stats() devuelve una instantánea detallada de estadísticas de bajo nivel sobre una conexión MySQL: bytes transferidos, conteo de consultas, tamaños de búfer y docenas de otros contadores recopilados por el controlador subyacente mysqlnd. Esta página explica qué devuelve la función, cuándo es realmente útil y cómo interpretar los valores más importantes.
Qué hace mysqli_get_connection_stats()
mysqli_get_connection_stats() devuelve un array asociativo de estadísticas de tiempo de ejecución para una única conexión MySQLi ya abierta. Los contadores provienen de mysqlnd (el MySQL Native Driver), que es el controlador predeterminado incluido con PHP desde PHP 5.4, por lo que la función está disponible en cualquier instalación moderna de PHP siempre que se use mysqlnd.
Su firma es:
mysqli_get_connection_stats(mysqli $mysql): array- Parámetro —
$mysqles un objetomysqliválido devuelto pormysqli_connect()(estilo procedimental) onew mysqli(...)(estilo orientado a objetos). - Valor de retorno — un array de pares
string => int|string. Devuelvefalseúnicamente si el controlador no puede proporcionar estadísticas (prácticamente nunca ocurre en una compilación normal de mysqlnd).
Una distinción clave: estas son estadísticas por conexión. Si deseas totales a nivel de proceso para todas las conexiones en la solicitud PHP actual, usa mysqli_get_client_stats() en su lugar.
Cómo usarlo
Abre una conexión y luego pásala a la función. Tanto el estilo procedimental como el orientado a objetos funcionan:
<?php
// Procedural style
$mysqli = mysqli_connect("localhost", "username", "password", "database");
if (!$mysqli) {
die("Connection failed: " . mysqli_connect_error());
}
$stats = mysqli_get_connection_stats($mysqli);
print_r($stats);
mysqli_close($mysqli);<?php
// Object-oriented style — identical result
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_errno) {
die("Connection failed: " . $mysqli->connect_error);
}
$stats = $mysqli->get_connection_stats();
print_r($stats);
$mysqli->close();print_r() vuelca el array completo, que tiene más de 160 entradas. Una muestra resumida tiene este aspecto:
Array
(
[bytes_sent] => 43
[bytes_received] => 80
[packets_sent] => 1
[packets_received] => 2
[connect_success] => 1
[com_query] => 0
[rows_fetched_from_server_normal] => 0
[result_set_queries] => 0
...
)Lectura de los contadores más útiles
Rara vez necesitarás los 160 valores. Estos son los que merece la pena vigilar:
| Contador | Significado |
|---|---|
bytes_sent / bytes_received | Carga total transferida por la red, en bytes. Útil para detectar conjuntos de resultados demasiado grandes. |
packets_sent / packets_received | Conteo de paquetes de protocolo — una relación alta con respecto a los bytes puede indicar muchos viajes de ida y vuelta. |
connect_success / connect_failure | Cuántos intentos de conexión tuvieron éxito o fallaron en este manejador. |
com_query | Número de sentencias enviadas con COM_QUERY (es decir, consultas no preparadas). |
rows_fetched_from_server_normal | Filas que el servidor envió para resultados en búfer — una forma rápida de detectar lecturas accidentales de tablas completas. |
result_set_queries | Consultas que produjeron un conjunto de resultados. |
Como la mayoría de estos valores son enteros, puedes extraer uno solo del array directamente:
<?php
$stats = mysqli_get_connection_stats($mysqli);
echo "Bytes received so far: " . $stats['bytes_received'] . PHP_EOL;Cuándo usarlo
Recurre a mysqli_get_connection_stats() cuando estés:
- Perfilando la transferencia de datos — confirmando que una consulta no está recuperando muchas más filas o bytes de los esperados.
- Depurando el comportamiento de la conexión — comprobando
connect_failureu otros contadores relacionados con la reconexión cuando una conexión parece inestable. - Construyendo diagnósticos ligeros — registrando algunos contadores tras una solicitud para rastrear la carga de la base de datos a lo largo del tiempo.
Es una herramienta de inspección de solo lectura: llamarla nunca modifica la conexión ni los datos. Para la configuración y el cierre de conexiones en general, consulta mysqli_connect() y mysqli_close(); para detalles de error, consulta mysqli_connect_error().
Conclusión
mysqli_get_connection_stats() expone los contadores por conexión de mysqlnd como un array simple, ofreciéndote una ventana fácil para ver cuántos datos ha movido una conexión y cuántas consultas ha ejecutado. Combinada con mysqli_get_client_stats() para totales a nivel de solicitud, es una forma práctica y sin coste de perfilar y depurar tus interacciones con MySQL.