Понедельник, 15.06.2026, 10:08
Приветствую Вас Гость | RSS
Поиск по каталогу
Главная страница | Каталог статей | Регистрация | Вход

Информационные технологии
Форма входа
Меню сайта

Категории каталога
php [246]
perl [1]
perl
ASP [1]
AJAX [0]

Друзья сайта

Наш опрос
Оцените мой сайт
Всего ответов: 69

Начало » Статьи » Web программирование » php

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

?>


Вот и все ! :)
Категория: php | Добавил: freeone (09.05.2007) | Автор: Barbos
Просмотров: 657 | Комментарии: 2 | Рейтинг: 0.0 |

Всего комментариев: 0
Имя *:
Email *:
Код *:

Copyright Информационные технологии © 2006