Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


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

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


Вот и все ! :)
Автор: Barbos
Сайт: http://www.WebClass.ru






Просмотров: 3717

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную