Главная страница статей --> Советы по фотошопу, графике и хитрости в построении php кода

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

Источник: realcoding.net

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

Вот и все ! :)



Похожие статьи:
- Модуль mod_rewrite. Часть 4.
- Защита include-модулей от несанкционированного доступа
- О грамотном использовании БД MySQL
- Песня о слоганах: о чем сайт?
- Как читают web-пользователи?
- Использование сценариев для построения шаблонов HTML-страниц
- Свой счётчик
- Работа с FTP средствами PHP
- Net-SMTP
- Секреты кэширования
- Гостевая книга на Perl
- Счетчик нажатий на ссылку на Perl
- Поиск в Google из Python


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |

Контакты
Редакция:
[0.001]