Показаны сообщения с ярлыком Время выполнения SQL запросов. Показать все сообщения
Показаны сообщения с ярлыком Время выполнения SQL запросов. Показать все сообщения

вторник, 22 января 2019 г.

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

Время выполнения 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) . '%');
?>
Вот и все ! :)