2013-04-02 23 views
1

我有一个规则列表,并基于这些我触发多个查询规则的时间最长,如何确定哪些查询正在执行

但它需要一段时间的一个查询运行和我我试图找出哪一个花了太长时间,所以我可以找出解决方案。

我不明白为什么它的时间过长(超过7秒),

我所有的查询更新,插入,删除,和一个小的选择情侣

注:我经过一个jQuery事件后,所以我得到一个超时错误当前和多数民众因为页面的执行时间长于7秒。我可以通过增加超时值来解决它。但我想解决问题的根源。执行简单的选择,插入,更新或删除操作不需要很长时间。

我使用PDO来执行查询和我用我自己的类连接到表和执行查询。如果你喜欢看我的课,请点击此此How can I return LastInsertID from PDO whin a method of a class

+1

在Chrome浏览器上,您可以使用pagespeed来查看单个呼叫是如何执行的,即使网络标签页也应该给出透视图 – karthikr

+0

为什么不能在您的类的方法中添加2个microtime()调用来运行查询? –

+0

我如何获得microtime()? – Jaylen

回答

0

你可以换PDO类和日志执行时间查询()方法。什么是这样的:

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); 
    } 
} 

MyPDO更换PDO使用类。就像这样:

旧代码

$connection = new PDO(...); 

新代码

$connection = new MyPDO(...); 
+0

请,没有printfs。为什么不使一点可用?将它与查询一起添加到数组中,并仅根据需要进行打印 –

+0

如何使用此方法?每次运行查询时都会调用它吗? – Jaylen

+0

@Mike通过代码中的MyPDO替换PDO,并像以前一样使用它(无需更改)。请注意,在许多情况下,使用扩展PDO的自定义类很有用。最后并没有像这样调试 – hek2mgl

0

这类似于从hek2mgl答案,但我包括一个解释。

当我想知道什么花费多长时间(查询,函数,等等)的最直接的方法就是尽快带你开始之前一个时间戳,然后又是一个,你就大功告成了。减去结束时间的起始时间和你知道到底有多少秒钟已经过去了。

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

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

如果您需要更精确,你可以使用microtime中()作为hek2mgl做。

+0

感谢此代码:) – Jaylen

相关问题