DataLife Engine > PHP > Время выполнения SQL запросов

Время выполнения SQL запросов


12 января 2008. Разместил: podpole
Итак, нам нужно засечь время, потраченное на выполнение SQL запросов ? Это не очень легко, но и не сложно. Начнем с определения задачи. Необходимо выдать полное время, затраченное на генерацию страницы и время, затраченное на выполнения SQL запросов, еще было бы здорово вывести процент от общего времени.

Сначала напишем функцию, которая выдает время, затраченное на выполнение своего кода:
function do_something(){        $mtime = microtime();         $mtime = explode(" ",$mtime);         $mtime = $mtime[1] + $mtime[0];         $tstart = $mtime;     //here is the code to execute     //.........        $mtime = microtime();         $mtime = explode(" ",$mtime);         $mtime = $mtime[1] + $mtime[0];         $tend = $mtime;         $tpassed = ($tend - $tstart);         return($tpassed);    }

Для конкретно нашей задачи, нужно модифицировать эту функцию так, чтобы выполнялись SQL запросы:
    //запрос передается как аргумент    function do_query($query){    //подсоединяем две глобальные переменные        global $result;        global $qnum;    //счетчик запросов        $qnum++;    //засекаем время старта        $mtime = microtime();         $mtime = explode(" ",$mtime);         $mtime = $mtime[1] + $mtime[0];         $tstart = $mtime;     //выполняем запрос            $result = MYSQL_QUERY($query);    //засекаем время окончания        $mtime = microtime();         $mtime = explode(" ",$mtime);         $mtime = $mtime[1] + $mtime[0];         $tend = $mtime;         $tpassed = ($tend - $tstart);     //возвращаем время, затраченное на запрос        return($tpassed);    }

Теперь у нас есть функция, которая считает запросы и выдает время экзекуции :) Вот как она должна быть использована:
//Не забудьте где-нибудь в начале скрипта объявить эти две переменные:    $result=0;    $qnum=0;//...//Вызов функции:    $sql_time+=do_query("SELECT * FROM SOME_TABLE");//Теперь можно разбирать полученные данные:    while($row = mysql_fetch_array($result)){        print($row['Text']);    }

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


Вот и все ! :)