我有一个内存使用过载的问题,需要扫描所有的脚本。
我的问题是如何在php中显示正在运行的mysql查询列表?
我有一个内存使用过载的问题,需要扫描所有的脚本。
我的问题是如何在php中显示正在运行的mysql查询列表?
mysql_query('show processlist');
此命令应返回等待处理的所有查询。通常我直接从mysql控制台中使用,无需格式化输出。
mysql_query
函数重命名,并编写自己的函数,其中包含一些额外的日志记录/检查代码,以查看查询中出现了什么问题: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;
}
mysql_query()
的包装器,然后您可以实现自己的日志记录,其中:mysql_query()
的调用。show full processlist;
,这将显示所有活动查询,您可以从那里进行调试。此外,向您的项目添加一些工具以记录慢查询将会很有益处。在任何时候只有一个查询正在运行,因为这是PHP的工作方式,它不会异步地执行操作。除非您使用某种第三方库来进行不同的处理。
*编辑:似乎是可能的,请参阅:PHP异步调用?。但是,当您让PHP异步运行时,仍然无法知道有多少查询正在运行。也许你可以尝试在运行代码时检查一些mysql统计信息。