NP_cles()

12345678910111213141516171819202122232425262728293031

実行したクエリの内容をトラッキングする

 
投稿者:hsur 投稿日時:2007-06-14 - 23:48
カテゴリー:Nucleus Tips - - トラックバック(0)- Views: 236

katsumiさんがNucleusのSQLクエリ実行回数とメモリ消費量を測っていたので、うちでもまねしてみました。

目から鱗 w/SQLite SQL クエリーの実行回数

ここでは同時に、メモリの消費量を見るためにmemory_get_usage()関数の戻り値も表示している(PHPのコンパイル方法によっては、この関数は使えないので注意)。

memory_get_usage()、こんな関数あったんですね。うちではメモリ使用量はキャッシュヒット時で800k弱キャッシュミスヒット時で1.1Mくらいでした。

実はクエリの実行回が多いことについてはずいぶん前からわかっていて、僕のところでは最悪で500程度の数値が出ていました。これらについては後述の方法で実行したクエリの内容を保存しておいてそのクエリの内容を分析してチューニングしたりしていました。

実は画面の左下に

これらの値については画面のNP_Benchmarkを改造して画面の左下に表示しています。
左から、メモリ使用量(B), クエリ実行数(回), 処理時間(秒)という感じです。

[625712, (20/20)q., 0.05sec.]

参考)Nucleusの実行クエリをトラッキングする

globalfunctions.php

function sql_query($query) { global $SQLCount; //added by hsur global $SQLQs; $SQLQs .= trim(preg_replace('/(\r|\n|\t| )+/i',' ',$query))."\n"; $SQLCount++; $res = mysql_query($query) or print("mySQL error with query $query: " . mysql_error() . '<p />'); return $res; }

この状態でindex.phpの一番最後に下記を追加すると実行したクエリが表示されるようになります。

echo '<!--'.$SQLQs.'-->';

この処理はクエリが多いとその分メモリを消費するので必要時以外はコメントアウトしておいたほうがいいです。

    このエントリは役に立ちましたか?

      

    トラックバックについて [policy]

    Trackback URL:
    Trackbacks
    このエントリにトラックバックはありません

    Comments [policy]

    Andy wrote:

    クエリーの回数も気になりますが,それよりも「遅い」クエリーがどれくらいあるのかとか,同じものを繰り返し取っていないかなどが気になります。そういうのも簡単に調べられるといいんですけどねえ。

    2007-06-15 15:01 <%HatenaAuth()%> 

    hsur wrote:

    MySQL5.1系であれば実行したクエリのコストがわかるんですが、みんなで使うのはちょっと難しいですよね。

    show session status like 'Last_query_cost';

    実行時間をとってみて長いものだけ保存しておくというのがいいのかなぁ。

    2007-06-16 16:51 <%HatenaAuth()%> 

    Add Comments

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン