0

開発サイトでzendデータベースプロファイラーをセットアップしてオンにしました。新しいテーブルオブジェクトを要求するたびに実行する必要があるDESCRIBEクエリを除いて、すべてのクエリを確認できます。私はクエリを見るためにこのようなものを使用しています:

$db = Zend_Registry::get('db');
$profiler = new Zend_Db_Profiler();
$profiler->setEnabled(true);
$db->setProfiler($profiler);

$i = 1;
$output = 'PROFILE FOR: '.$_SERVER['REQUEST_URI'] . "\n";

    foreach ($profiler->getQueryProfiles() as $query) {
        $output .= "Query ".$i++.": ".$query->getQuery(). "\n";
    }
    $output .= 'Average query length: ' . $totalTime / $queryCount .
                ' seconds' . "\n";

    $output .= 'Queries per second: ' . $queryCount / $totalTime . "\n";
    $output .= 'Longest query length: ' . $longestTime . "\n";
    $output .= "Longest query: \n" . $longestQuery . "\n\n";

    file_put_contents('/tmp/zend_profiler.log', $output, FILE_APPEND);
}

記述クエリが表示されない理由がわかりません。他の誰かがこの問題に遭遇しましたか?

4

1 に答える 1

0

データベース接続のメタデータ キャッシュを有効にしている可能性があります (これは通常、特に本番環境では非常に良いことです)。その場合、DESCRIBEクエリはキャッシュの有効期限が切れるまで実行されません。

ブートストラップ後にアプリケーションのどこかでこの行を実行して確認します

if (null != Zend_Db_Table_Abstract::getDefaultMetadataCache()) {
  echo "Cache is active, describe queries not run";
} else {
  echo "Cache is not active";
}
于 2011-08-22T12:34:47.913 に答える