Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Время выполнения SQL запросов 
:(
    Опции темы
DezmASter
Дата 22.4.2007, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дизайнер :)
***


Профиль
Группа: Участник
Сообщений: 1520
Регистрация: 3.2.2006
Где: Украина, Запорожь е

Репутация: нет
Всего: 109




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


Теперь у нас есть функция, которая считает запросы и выдает время экзекуции smile Вот как она должна быть использована:

Код

//Не забудьте где-нибудь в начале скрипта объявить эти две переменные:
    $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) . '%');
?> 


Вот и все ! smile

Автор: Barbos 
Сайт автора: www.webclass.ru

PM WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0695 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.