La actividad del complemento se puede monitorizar usando el registro de rastreo de mysqlnd, las estadísticas de mysqlnd, las estadísticas del complemento mysqlnd_ms y herramientas de depuración externas de PHP. El uso del registro de rastreo debería limitarse a la depuración. Se recomienda usar las estadísticas del complemento para la monitorización.
La escritura de un registro de rastreo es una operación lenta. Si se usa una herramiento de depuración externa de PHP, consulte el manual del proveedor para el impacto de rendimiento y el tipo de información recopilada. En la mayoría de los casos, las herramientas de depuración externas proporcionarán pilas de llamadas. A menudo, es más difícil interpretar una pila de llamadas o un registro de rastreo que las estadísticas proporcionadas por el complemento.
Las estadísticas del complemento indican con qué frecuencia se ha usado un tipo de clúster (esclavo o maestro), por qué se ha usado el nodo, si se han usado conexiones retardadas y si se ha realizado una inyección de ID de transacciones global. La información de la monitorización proporcionada permite al usuario verificar las decisiones del complemento y planear los recursos del clúster basándose en el patrón de uso. La función mysqlnd_ms_get_stats() se usa para acceder a las estadísticas. Por favor, vea las descripciones de las funciones para obtener una lista de las estadísticas disponibles.
Las estadísticas se recopilan en base a cada proceso de PHP. Su alcance es un proceso de PHP. Dependiendo del modelo de desarrollo de PHP, un proceso puede servir una o múltiples peticiones web. Si se usa el modelo CGI, un proceso de PHP sirve una petición web. Si se usa FastCGI o modelos de servidores web prebifurcados, un modelo de PHP normalmente servirá múltiples peticiones web. Lo mismo ocurre en el caso de un servidor web con subprocesos. Observe que los hilos ejecutados en paralelo podrían actualizar las estadísticas en paralelo. Por lo tanto, si se usa un modelo de desarrolo de PHP con hilos, las estadísticas podrían ser modificadas por más de un script al mismo tiempo. Un script no puede depender del hecho de que vea solamente sus propios cambios realizados a las estadísticas.
Ejemplo #1 Comprobar la actividad del complemento en un modelo de desarrollo sin hilos
mysqlnd_ms.enable=1 mysqlnd_ms.collect_statistics=1
<?php
/* Equilibrado de carga siguiendo las reglas de la sección "myapp" del fichero de configuración del complemento (no se muestra) */
$mysqli = new mysqli("myapp", "nombre_usuario", "contraseña", "base_datos");
if (mysqli_connect_errno())
/* Por supuesto, su manejo de errores es más agradable... */
die(sprintf("[%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()));
$stats_before = mysqlnd_ms_get_stats();
if ($res = $mysqli->query("SELECT 'Read request' FROM DUAL")) {
var_dump($res->fetch_all());
}
$stats_after = mysqlnd_ms_get_stats();
if ($stats_after['use_slave'] <= $stats_before['use_slave']) {
echo "Según las estadísticas, ¡la petición de lectura no se ha ejecutado en un esclavo!";
}
?>
Las estadísticas se agregan para todas las actividades del complemento y todas las conexión manejadas por el mismo. No es posible indicar cuánto contribuye un gestor de conexión en particular para el total de las estadísticas.
Utilizar la función de PHP register_shutdown_function() o la directiva de configuración de PHP auto_append_file es posiblemente más sencillo para volcar las estadísticas, por ejemplo, a un fichero de registro cuando un script finaliza. En lugar de usar un fichero de registro, también es posible enviar las estadísticas a una herramienta externa de monitorización para su registro y visualización.
Ejemplo #2 Registrar las estadístcias durante el cierre
mysqlnd_ms.enable=1 mysqlnd_ms.collect_statistics=1 error_log=/tmp/php_errors.log
<?php
function check_stats() {
$msg = str_repeat("-", 80) . "\n";
$msg .= var_export(mysqlnd_ms_get_stats(), true) . "\n";
$msg .= str_repeat("-", 80) . "\n";
error_log($msg);
}
register_shutdown_function("check_stats");
?>