2012-04-02 13 views
0

1つのページで実行されるクエリの総数と、そのページをZend Frameworkで生成するのにかかる時間を取得する方法はありますか?Zend Frameworkのページ読み込み時間と合計クエリ数

この情報をログに記録して、どこにボトルネックが発生しているか、および生成するために大量のリソースが必要なページがあるかを確認できます。

ありがとう、

+0

この回答は、同様にあなたに興味がある可能性がありますhttp://stackoverflow.com/questions/9468922/zend-db-profiler-log-to-file/9471309#9471309それは 'を示し'Zend_Db_Profiler'を使ってクエリ情報を記録する' dispatchLoopShutdown'プラグインです。私の 'index.php'ファイルに' $ GLOBALS ['_ T0'] = microtime(true); 'を追加して、' time() 'からそれを減算して合計時間を得ることができます。アプリケーションで同様のコードを使用して、クエリを生成し、フッターに表示される時間統計を生成します。私の場合、 '$ this-> getResponse() - > setBody()'を使用して、プレースホルダを生成した実際の統計値に置き換えます。 – drew010

答えて

3

Dbのプロファイリングツールは、それがZend_Db_Profilerをを呼び出すと、あなたはここに公式ドキュメントを読んで、それを使用する方法を見つけることができます、利用可能であることを確認してください:

http://framework.zend.com/manual/en/zend.db.profiler.html#zend.db.profiler.using

は基本的に、あなたはこのような何かをしなければなりません

$db = Zend_Db_Table::getDefaultAdapter(); 
$profiler = $db->getProfiler(); 
$totalTime = $profiler->getTotalElapsedSecs(); 
$queryCount = $profiler->getTotalNumQueries(); 

ページの合計ロード時間は、レイアウトを使用していない場合、predispatchおよびpostDispatchメソッドの実行中に現在の(マイクロ)時間を取得するベースコントローラクラスを作成することをお勧めします。すべてのコントローラの基本クラスです。 Zend_Controller_Actionのの代わりにMyapp_Controller_Actionを拡張する必要があります

class Myapp_Controller_Action extends Zend_Controller_Action 
{ 
    protected $_startTime; 
    protected $_endTime; 
    protected $_totalTime; 

    public function preDispatch() 
    { 
    parent::preDispatch(); 
    $this->_startTime = microtime(true); 
    } 

    public function postDispatch() 
    { 
    parent::postDispatch(); 
    $this->_endTime = microtime(true); 
    $this->_totalTime = $this->_endTime - $this->_startTime; 
    // do something with $this->_totalTime; 
    } 
} 

そして、あなたのアプリケーション内のすべてのコントローラ::おそらくこのような何かは仕事をすることがあり

class IndexController extends Myapp_Controller_Action 
{ 
    ... 
} 
0

データベースアダプタのプロファイラを有効にすることができます。もちろん$Db

$Db->getProfiler()->setEnabled(TRUE); 

は、データベースアダプタのインスタンスである必要があります。これを行うには、あなたのソフトウェアの最初にあるべき次の行を記述する必要があります。すべてのクエリを取得するには、

$Db->getProfiler()->getQueryProfiles() 

もちろん、公式の文書からプロファイラについて読むことができます。

0

プラグインのディスパッチフックの前後にフックし、タイムスタンプをDBテーブルに記録することができます。ポストでは、対応する発送前のスタンプを探して合計を計算することができます。

クエリの場合、最も簡単な方法は、クエリを作成するために使用しているものにラッパーを追加し、クエリメソッドが呼び出されるたびにラッパークラスの静的カウンタをインクリメントすることです。ポストディスパッチフックでは、これもDBに記録することができます。 http://devzone.zend.com/1224/front-controller-plugins-in-zend-framework/

幸運を見て、プリ/ポストディスパッチフックを訴えるために、プラグインを記述するための

2

はさらに、ここでのデバッグのためのアドバイスです。もちろん、ログには適用されません。 あなたは一緒に本当にすてきであるFirefoxでZend_Db_Profilerを+ Firebugの+ FirePhpを使用することができます。 設定は(私はの.ini形式を使用していますが、コードやXMLによって適合させることができる)ようになります。

database.params.profiler.enabled = true 
database.params.profiler.class = Zend_Db_Profiler_Firebug 

あなたは」このような結果が得られます:あなたのデータベースで費やされた合計時間+クエリの詳細と時間(およびオプションのパラメータ)。偉大な毎日ツールを使用する!

enter image description here

関連する問題