如何确定哪个查询执行时间最长

时间:2013-04-02 18:45:53

标签: php jquery mysql performance pdo

我有一个规则列表,并根据这些规则触发多个查询,

但是其中一个查询需要一段时间才能运行,而我正在试图找出哪一个花了太长时间才能找到解决方案。

我不明白为什么花了太长时间(超过7秒)

我的所有查询都是更新,插入,删除和一些小选择

注意:我正在传递一个jquery post事件,所以我当前得到一个超时错误,那是因为页面的执行时间超过了7秒。我可以通过增加超时值来解决它。但我想解决问题的根源。执行简单的选择,插入,更新或删除不应该花那么长时间。

我使用PDO执行查询,我使用自己的类连接到表并执行查询。如果您想看我的课程,请按照此How can I return LastInsertID from PDO whin a method of a class

进行操作

3 个答案:

答案 0 :(得分:2)

您可以启用MySQL慢查询日志以查看需要很长时间的数据库查询

http://dev.mysql.com/doc/refman/5.5/en/slow-query-log.html

默认情况下,它会显示超过10秒的查询

http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_long_query_time

我建议将该参数更改为2秒。

答案 1 :(得分:0)

您可以包装PDO类并在query()方法中记录执行时间。这样的事情怎么样:

class MyPDO extends PDO {

    // extended query method that logs the time a query takes to execute
    public function query($sql) { 
        $start = microtime(true);
        parent::query($sql);

        printf("the query %s took: %s seconds\n",
            $sql,
            microtime(true) - $start);
    }
}

PDO替换为MyPDO来使用该课程。像这样:

旧代码

$connection = new PDO(...);

新代码

$connection = new MyPDO(...);

答案 2 :(得分:0)

这与hek2mgl的回答相似,但我要包含一个解释。

当我想知道任何事情需要多长时间(查询,函数等)时,最直接的方法是在开始之前采用时间戳,然后在完成后再采用另一个时间戳。从结束时间中减去开始时间,您就知道已经过了多少秒。

$start = time();
doStuff();
$end = time();
$duration_in_seconds = $end - $start;
echo "Function doStuff() took $duration_in_seconds seconds";

您可以将持续时间回显到屏幕或将其记录到文件中,无论方便。

如果你需要更精确,你可以像hek2mgl那样使用microtime()。