[英]Count number of MySQL queries executed on page
我如何計算在一個頁面加載上執行的sql查詢的數量?
我有一個類似的腳本來生成頁面所花費的時間,但不是已經執行了多少查詢。
你知道我的意思,比如在SMF論壇上,在頁腳中,他們有:
頁面在0.136秒內創建,包含7個查詢。
在頁腳?
替換所有mysql_query(ies)並不是一個真正的選擇,有太多的mysql_queries需要替換,盡管我可以花一天的時間去做它。
謝謝
SHOW SESSION STATUS LIKE 'Questions'
SMF通過擁有自己的自定義查詢功能來進行查詢計數:
function db_query($db_string, $file, $line)
{
global $db_cache, $db_count, $db_connection, $db_show_debug, $modSettings;
// One more query....
$db_count = !isset($db_count) ? 1 : $db_count + 1;
...
實現你想要做的事情最簡單的方法就是做同樣的事情。 為mysql_query創建一個包裝器並使用它而不是mysql_query。
我認為以下命令是每個會話計數:
SHOW STATUS LIKE 'com_select%'
您可以通過調用獲取執行的查詢數。
show session status like "Queries";
在頁面創建的開始和結束時調用它,然后您可以看到已經有多少查詢。 不要忘記這個命令本身也算作一個。
這是一個比SMF更容易遵循的例子。
class QueryLogger
{
public $queries = array();
public function query($sql)
{
$start = microtime(true);
$query = mysql_query($sql);
$queries[] = microtime(true) - $start;
return $query;
}
public function getCount()
{
return sizeof($this->queries);
}
public function getTime()
{
return array_sum($this->queries);
}
}
$queryLogger = new QueryLogger;
$query1 = $queryLogger->query('...');
$query2 = $queryLogger->query('...');
echo 'Ran '.$queryLogger->getCount().' queries in '.$queryLogger->getTime().' seconds.';
在Quassnoi評論后,我把它放在腳本的開頭:
$res = mysql_query("SHOW SESSION STATUS LIKE 'Questions'");
$row = mysql_fetch_array($res, MYSQL_ASSOC);
define("START_QUERIES",$row['Value']);
和這個:
$res = mysql_query("SHOW SESSION STATUS LIKE 'Questions'");
$row = mysql_fetch_array($res, MYSQL_ASSOC);
define("STOP_QUERIES",$row['Value']);
你可以看到總查詢次數:
echo "No of queries: ".(STOP_QUERIES-START_QUERIES-1);
我不知道為什么使用-1,也許它會計算mysql_select_db語句(或smth),但它在我的localhost上工作得很好
要計算查詢數,您需要計算查詢數。 很抱歉聽起來多余,但確實很簡單。
創建一個計數函數( mysql_query_counted
?),然后使用grep在你的代碼庫中搜索mysql_query(
並且它不應該花費超過一兩個小時。可能甚至考慮使用sed
或類似函數來替換函數調用。
關於SMF和類似內容的注釋。 它們使用數據庫抽象層,因此它們已經在使用自己的query
函數,並且在以后添加查詢計數就像添加一個將計數器遞增到該函數的行一樣簡單。 我認為+1用於抽象和封裝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.