zend db プロファイラーでテーブル名でクエリをフィルタリングする方法はありますか? ドキュメントには何もありませんが、このドキュメントに完全に依存できるかどうかはわかりません..方法を知っている場合は、アドバイスしてください..
1 に答える
1
現在、テーブル名に基づいてプロファイラーをフィルター処理する方法はありません。クエリの種類 (INSERT、UPDATE など) またはクエリの経過時間によってのみです。
これは、あなたが望むことをするのに役立つかもしれないいくつかのコードです。ただし、私はそれをテストしていませんが、うまくいけば、あなたが始めることができます.
基本的に、プロファイリングされた各クエリをループし、preg_match を使用してクエリがテーブルに対するものかどうかを確認し、そうでない場合はクエリ情報を設定解除して続行し、そうである場合はいくつかの統計を更新します。foreach の最後にある $queries は、プロファイリングするテーブルへのクエリのみである必要があります。
<?php
$tableName = 'my_table';
/** var $profiler Zend_Db_Profiler */
$profiler = $db->getProfiler();
$queries = $profiler->getQueryProfiles();
$totalQueries = 0;
$totalTime = 0;
if ($queries !== false) {
foreach ($queries as $index => $query) {
$queryString = $query->getQuery();
$t = preg_quote($tableName);
if (!preg_match("/UPDATE .?$t.? /i", $queryString) ||
!preg_match("/INSERT INTO .?$t.?/i", $queryString) ||
!preg_match("/DELETE FROM .?$t.?/i", $queryString) ||
!preg_match("/REPLACE .*?INTO .?$t.?/i", $queryString) ||
) {
unset($queries[$index]);
continue;
}
$totalQueries++;
$totalTime += $query->getElapsedSecs();
}
}
于 2011-09-19T17:21:34.620 に答える