2009-08-17 7 views
11

1ページの負荷で実行されたSQLクエリの数をどのように数えますか?ページで実行されたMySQLクエリのカウント数

私は、ページが生成されるのにかかる時間と同様のスクリプトを持っていますが、実行されたクエリの数はありません。

あなたはこのようなSMFのフォーラムのように、私が何を意味するか知っているが、フッターに、彼らが持っている:7つのクエリと0.136秒で作成し

ページ。

フッターには?

すべてのmysql_query(ies)を置き換えることは実際にはオプションではありません。必要に応じてやり直すことができますが、置き換えるには多すぎるmysql_queriesがあります。クエリの数をカウントする

おかげ

答えて

7

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の代わりにそれを使用します。

0

は、あなたはクエリの数をカウントする必要があります。冗長に聞こえて申し訳ありませんが、本当に簡単です。

カウント機能(mysql_query_counted?)を作成し、grepを使用してコードベースをmysql_query(に検索します.1時間または2時間かかることはありません。おそらくsedなどを使用して関数呼び出しを置き換えることについて考えることさえあります。

この内蔵型のSMFなどのメモ。彼らはDB抽象化レイヤーを使用しているので、すでに独自のquery関数を使用しており、後でクエリーカウントを追加すると、その関数にカウンタをインクリメントする行を追加するだけで簡単になります。私が想定している抽象化とカプセル化のための+1。

12
SHOW SESSION STATUS LIKE 'Questions' 
2

これまで実行されたクエリの数は、呼び出して取得できます。

show session status like "Queries"; 

これをページ作成の開始時と終了時に呼び出して、そこにいくつのクエリがあるかを確認できます。このコマンド自体も1つと数えられることを忘れないでください。

+1

にかなり良い作品

echo "No of queries: ".(STOP_QUERIES-START_QUERIES-1); 

これは "質問"かそれとも重要なのでしょうか?私は "クエリ"を実行し、結果を得ることはできませんでしたが、 "質問"は正常に動作するように見えました。 – jmccartie

+0

ここにその説明があります:http://dev.mysql.com/doc/refman/5.0/en/server-status-variables.html – Zed

2

以下は、SMFよりも簡単な例です。

$res = mysql_query("SHOW SESSION STATUS LIKE 'Questions'"); 
$row = mysql_fetch_array($res, MYSQL_ASSOC); 
define("START_QUERIES",$row['Value']); 

と、この:私は、スクリプトの先頭でこれを入れ

SHOW STATUS LIKE 'com_select%' 
+0

コードを更新するのにかかる時間については、検索/置き換えてください。 'mysql_query'を検索し、 '$ queryLogger-> query'に置き換えてください。 – whichdan

+0

$ queryLoggerがインスタンス化されていることを確認する必要があります。 –

+0

うーん、そしてmysqliのために、それほど大きな変更はありませんか? – bear

3

は、私は、次のコマンドは、セッションごとのカウントだと思う

$res = mysql_query("SHOW SESSION STATUS LIKE 'Questions'"); 
$row = mysql_fetch_array($res, MYSQL_ASSOC); 
define("STOP_QUERIES",$row['Value']); 

あなたとクエリの合計NUMを見ることができます:-1を使用する理由私も多分それはmysql_select_dbの文(またはなめらか)をカウントし、知りませんが、それは私のlocalhostの

1

Quassnoiコメント後:

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.'; 
関連する問題