【问题标题】:How to show running mysql queries in php如何在 php 中显示正在运行的 mysql 查询
【发布时间】:2010-01-19 08:44:11
【问题描述】:

我有一个内存使用溢出问题,我需要扫描我的所有脚本。

我的问题是如何在 php 中显示正在运行的 mysql 查询列表?

【问题讨论】:

    标签: php mysql memory memory-management


    【解决方案1】:

    如果问题出在 MySQL 网站上,这可能会有很大帮助:

    mysql_query('show processlist');
    

    它应该返回所有等待处理的查询。我通常直接从 mysql 控制台使用它,我不必格式化输出。

    【讨论】:

    【解决方案2】:

    您可以重命名原始 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;
    }
    

    【讨论】:

      【解决方案3】:

      除非您正在运行一个具有大量流量的网站,否则运行/排队的查询的任何快照都不太可能具有代表性。在将查询与生成它的脚本相关联方面也存在问题。

      我建议检测您自己的代码 - 使用自动前置定义围绕 mysql_query() 的包装器,然后您可以实现自己的日志记录:

      1. 在触发脚本之前创建一个日志条目(大多数日志条目是在之后创建的 - 如果写入日志的代码崩溃,则不是很方便)
      2. 记录触发查询的脚本和查询本身
      3. 记录之前的内存使用情况
      4. 记录相同的事实以及所用的时间

      然后对您的源代码进行递归搜索和替换,以使用您的包装函数替换对mysql_query() 的调用。

      【讨论】:

      • 我知道了,我通过在脚本中设置一些断点找到了问题,但问题是用于显示我的最新故事的 while() 语句,例如,如果我想在一页中显示 5 个故事,那么num 查询将是 60 并且显示一个故事将是 13 问题是如何避免这个问题?
      【解决方案4】:

      我建议您连接到您的数据库服务器并运行show full processlist; 这将显示所有活动查询,您可以从那里进行调试。此外,在您的项目中添加一些工具来记录慢速查询将是有益的。

      【讨论】:

        【解决方案5】:

        在任何给定时间只有一个查询在运行,因为这就是 PHP 的工作方式,它不会做异步的事情。除非您使用某种 3rd 方库来做不同的事情。

        *编辑:似乎有可能,也许看看:Asynchronous PHP calls?。但是,当您让 PHP 异步运行时,仍然无法查看正在运行的查询数量。也许您可以在运行代码时尝试检查一些 mysql 统计信息。

        【讨论】:

        • 嘿,我知道如何找到正在运行的查询的数量:简单的 sql 查询语句:$con->sql_num_queries $con 是我的数据库类
        • 但是它可能只列出了来自多个活动页面的所有活动查询,而不仅仅是当前页面。或者是吗? :)
        • 如果你认为我的页面包括来自其他文件的其他功能,那么 sql 语句显示的查询数量就是现在正在破坏的查询数量。
        猜你喜欢
        • 2014-06-16
        • 1970-01-01
        • 1970-01-01
        • 2011-04-16
        • 2011-01-05
        • 1970-01-01
        • 2016-01-03
        • 2018-12-14
        • 1970-01-01
        相关资源
        最近更新 更多