我有一个规则列表,并根据这些规则触发多个查询,
但是其中一个查询需要一段时间才能运行,而我正在试图找出哪一个花了太长时间才能找到解决方案。
我不明白为什么花了太长时间(超过7秒)
我的所有查询都是更新,插入,删除和一些小选择
注意:我正在传递一个jquery post事件,所以我当前得到一个超时错误,那是因为页面的执行时间超过了7秒。我可以通过增加超时值来解决它。但我想解决问题的根源。执行简单的选择,插入,更新或删除不应该花那么长时间。
我使用PDO执行查询,我使用自己的类连接到表并执行查询。如果您想看我的课程,请按照此How can I return LastInsertID from PDO whin a method of a class
进行操作答案 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()。