php zend db profiler фильтр по имени таблицы - PullRequest
1 голос
/ 19 сентября 2011

Есть ли способ отфильтровать запросы по имени таблицы в профилировщике zend db ? В документации ничего нет, но я не знаю, могу ли я полностью положиться на этот документ ... если вы знаете способ, пожалуйста, сообщите ..

1 Ответ

1 голос
/ 19 сентября 2011

В настоящее время нет способа отфильтровать профилировщик по имени таблицы, а только по типу запроса (INSERT, UPDATE и т. Д.) Или по истекшему времени запроса.

Вот некоторый код, который вы можете попробовать, который может помочь вам сделать то, что вы хотите, хотя, обратите внимание, я не проверял его, но, надеюсь, он поможет вам начать работу.

По сути, он проходит по каждому профилированному запросу и использует preg_match, чтобы увидеть, был ли запрос к вашей таблице, и если нет, он сбрасывает информацию о запросе и продолжает, если это так, обновляет некоторую статистику. В конце каждого foreach, $ query, должен быть только запрос к таблице, которую вы хотите профилировать.

    <?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();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...