Cómo mostrar ejecutando consultas mysql en php

Tengo un problema de uso de memoria de desbordamiento y necesito escanear todos mis scripts.

Mi pregunta es ¿cómo puedo mostrar una lista de las consultas mysql en PHP?

Si el problema está en el sitio MySQL, esto podría ayudar mucho:

mysql_query('show processlist'); 

Debe devolver todas las consultas en espera de procesamiento. Por lo general, lo uso directamente desde la consola mysql donde no tengo que formatear la salida.

Puede cambiar el nombre de la función mysql_query original y escribir la suya que contenga un código adicional de registro / inspección para ver qué está mal con sus consultas:

 rename_function('mysql_query', 'mysql_query_original'); override_function('mysql_query', '$query', 'return mysql_query_override($query);'); function mysql_query_override($query){ echo "Query started"; // Add some more sensible information here $result = mysql_query_original($query); echo "Query ended"; // Add some more sensible information here return $result; } 

A menos que esté ejecutando un sitio con niveles masivos de tráfico, entonces es probable que cualquier instantánea de las consultas que se estén ejecutando / en cola no sea representativa. También hay problemas en términos de correlacionar la consulta con el script que la generó.

Recomiendo instrumentar su propio código: use un prepago automático para definir un ajuste alrededor de mysql_query() luego puede implementar su propio registro que:

  1. crea una entrada de registro antes de que se active la secuencia de comandos (la mayoría de las entradas de registro se crean después, no es muy útil si el código que escribe el registro se bloquea)
  2. registra la secuencia de comandos que activó la consulta y la consulta en sí
  3. graba el uso de memoria antes
  4. registra los mismos hechos después de junto con el tiempo tomado

Luego haga una búsqueda recursiva y reemplace su código fuente para reemplazar las llamadas a mysql_query() con su función de envoltura.

Le sugiero que se conecte a su servidor de base de datos y ejecute show full processlist; Esto le mostrará todas las consultas activas y puede depurar desde allí. También, sería beneficioso agregar algo de instrumentación a su proyecto para registrar consultas lentas.

Solo se está ejecutando una consulta en un momento dado, ya que así es como funciona PHP, no hace cosas asíncronas. A menos que uses algún tipo de biblioteca de terceros para hacerlo diferente.

* EDITAR: Parece que es posible, tal vez echar un vistazo a: ¿Llamadas asíncronas de PHP? . Sin embargo, cuando obtiene PHP para ejecutar async, todavía no hay manera de ver cuántas consultas se están ejecutando. Tal vez podrías intentar verificar algunas estadísticas de MySQL mientras ejecutas tu código.