2013-04-02 24 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

相關問題