Php 如何知道哪些查询在共享主机中占用了最多的cpu?
我有一个PHP+MySQL web应用程序,它运行在一个典型的共享主机上,我想知道调用最多的查询是什么,消耗了多少资源。这样,我将关注最昂贵的查询,以优化资源或检测严重优化的查询 例如: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% ... 如何做到这一点?您可以测量查询的执行时间,并将该信息与调试信息(如查
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作为一个抽象层: