Время выполнения SQL запросов
Автор: webclass.ru
Итак, нам нужно засечь время, потраченное на выполнение
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) . '%');
?>
Вот и все ! :)