Итак, нам нужно засечь время, потраченное на выполнение 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 запросы и
подсоединитесь к базе данных.
//Засекаем время старта $mtime = microtime(); $mtime = explode(" ",$mtime); $mtime = $mtime[1] + $mtime[0]; $tstart = $mtime;
//Коннектимся к базе: include 'connect.php';
//Объявляем переменные $result=0; $qnum=0;
//Объявляем нашу функцию 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); }
//Далее тело скрипта $sql_time+=do_query("SELECT * FROM SOME_TABLE"); //Обрабатываем данные while($row = mysql_fetch_array($result)){ print($row['Text']); }
//Пример еще одного запроса $sql_time+=do_query("SELECT * FROM ANOTHER"); //Обрабатываем данные $row = mysql_fetch_array($result); print($row['Another_Text']);
//Засекаем время окончания $mtime = microtime(); $mtime = explode(" ",$mtime); $mtime = $mtime[1] + $mtime[0]; $tend = $mtime; $total = ($tend - $tstart);
//Выдаем время: printf("SQL запросов: $qnum, время mysql: %f, всего затрачено: %f секунд !", $sql_time, $total);
//Вычисляем процент времени: $sqlpercent = ($sql_time*100)/$total; print('Процент времени на MySQL: '. round($sqlpercent, 2) . '%'); ?>
Вот и все ! :)
|