Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何知道哪些查询在共享主机中占用了最多的cpu?_Php_Mysql_Optimization - Fatal编程技术网

Php 如何知道哪些查询在共享主机中占用了最多的cpu?

Php 如何知道哪些查询在共享主机中占用了最多的cpu?,php,mysql,optimization,Php,Mysql,Optimization,我有一个PHP+MySQL web应用程序,它运行在一个典型的共享主机上,我想知道调用最多的查询是什么,消耗了多少资源。这样,我将关注最昂贵的查询,以优化资源或检测严重优化的查询 例如: query1 - 500 times - 50% (or 44seconds or any measuring criteria) query2 - 4000 times - 20% query3 - 300 times - 1% ... 如何做到这一点?您可以测量查询的执行时间,并将该信息与调试信息(如查

我有一个PHP+MySQL web应用程序,它运行在一个典型的共享主机上,我想知道调用最多的查询是什么,消耗了多少资源。这样,我将关注最昂贵的查询,以优化资源或检测严重优化的查询

例如:

query1 - 500 times - 50% (or 44seconds or any measuring criteria)
query2 - 4000 times  - 20%
query3 - 300 times - 1%
...

如何做到这一点?

您可以测量查询的执行时间,并将该信息与调试信息(如查询字符串本身、执行查询的文件和行以及结果数)一起保存到数据库的表中。可以使用此数据计算统计信息。

根据您的主机,您可以启用,它将列出任何耗时超过x秒的查询。

例如,对于PDO,您可以创建具有以下简单结构的类:

class DatabaseConnection extends PDO 
{

    private $queries = array();

    public function query($stmt)
    {
       $start_time = microtime(true);
       $result = parent::query($stmt);
       $end_time = microtime(true) - $start_time;

       $this->queries[] = array(
        'query' => $stmt,
        'time'  => $end_time
       );
       return $result;
    }    
}

我不张贴没有做垃圾邮件的主机名称。如果您想知道,请让我知道如果您有任何数据库抽象层,您可以在查询函数中包括日志记录-记录查询、函数开始和结束的时间,以及(可能使用查询的md5哈希)-调用查询的次数。您还可以在本地服务器上下载网站,安装xhprof并分析您的网站。您是否使用特定的数据库抽象层,您是否编写了自己的代码或将
mysq\u query
命令分散到整个代码中?您使用什么PHP扩展/驱动程序与db交互?我使用PhpDao作为一个抽象层: