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