如何知道哪些查询占用共享主机中的大部分cpu?

时间:2011-08-23 11:16:46

标签: php mysql optimization

我有一个在典型的共享主机上运行的PHP + MySQL Web应用程序,我想知道最常调用哪些查询以及消耗的资源数量。这样,我将专注于最昂贵的查询来优化资源或检测严重优化的查询。

例如:

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

我该怎么做?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

例如,对于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;
    }    
}

答案 2 :(得分:0)

根据您的主机,您可以启用Slow query log,其中列出的查询时间超过x秒。