Час виконання SQL запитів, Різне, Інтернет-технології, статті

Barbos

Отже, нам потрібно засікти час, витрачений на виконання 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). '%');
?>

От і все! 🙂

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*