0

Zend_Tableによって内部的に実行されるクエリをプロファイリングする方法を探しています。
たとえば、クイックスタートコースを終了した後、実行されたすべてのクエリをプロファイリングするにはどうすればよいですか?
次のように、application.iniからプロファイラーを有効にしようとしました。

resources.db.profiler.class   = "Zend_Db_Profiler_Firebug"
resources.db.profiler.enabled = true

そして、ゲストブックコントローラーの次の行を配置します。

...
$db = Zend_Db_Table_Abstract::getDefaultAdapter();
$profiler = $db->getProfiler();

echo $profiler->getTotalElapsedSecs();

それは私に0を与えます

また、次のようなBootstrapファイルでプロファイラーを有効にしようとしました。

protected function _initProfiler() {
    $this->bootstrap("db");
    $profiler = new Zend_Db_Profiler_Firebug("All DB Queries");
    $profiler->setEnabled(true);
    Zend_Registry::get("db")->setProfiler($profiler);
}

Whickは結果を返しません(Zend_Log_Writer_Firebug()を使用してFirebugとFirePHPをインストールしてテストしました)

助けていただければ幸いです。ありがとう !

4

2 に答える 2

2

Firebug プロファイラーは試していません。しかし、私は html テーブルを使用して、クエリを実行する各ページの下部にプロファイラー情報を出力します。

application.ini でプロファイラーを有効にする

resources.db.params.profiler = true

プロファイル結果をレイアウトにレンダリングします。

<?php
    $this->addScriptPath(APPLICATION_PATH . '/views/scripts');
    echo $this->render('profiler.phtml')
?>

profiler.phtml レンダリングするビュー

<?php
// get the default db adapter
$adapter = Zend_Db_Table::getDefaultAdapter();
$profiler = $adapter->getProfiler();
if ($profiler->getEnabled() && $profiler->getTotalNumQueries() > 0) :
?>
    <div style='text-align:center'>
        <h2>Database Profiling Report</h2>
        <p>Total queries executed: <?php echo $profiler->getTotalNumQueries() ?></p>
        <p>Total elapsed time: <?php echo $profiler->getTotalElapsedSecs() ?></p>
    </div>
    <table class='spreadsheet' cellpadding='0' cellspacing='0' style='margin:10px auto'>
        <thead>
            <tr>
                <th>#</th>
                <th>Query</th>
                <th>Time</th>
            </tr>
        </thead>
        <tbody>
    <?php foreach ($profiler->getQueryProfiles() as $queryNumber => $query) : ?>
                <tr>
                    <td>(<?php echo $queryNumber + 1 ?>)</td>
                    <td><?php echo $query->getQuery(); ?></td>
                    <td><?php echo $query->getElapsedSecs(); ?></td>
                </tr>
    <?php endforeach ?>
        </tbody>
    </table>
    <?php endif ?>

firebug プロファイラーの使用がはるかに難しいとは思いません。

于 2012-10-10T06:48:39.733 に答える
1

問題はパラメータのインスタンス化にありました。入ったら

resources.db.params.profiler.class   = "Zend_Db_Profiler_Firebug"
resources.db.params.profiler.enabled = true

以前の構成の代わりに、すべてがうまくいきました。パラメータ行の .params セクションに注意してください

于 2012-10-22T16:12:30.650 に答える