[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]







kritik2011
Ответов: 0
04-01-12 11:23



   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные



Базы Данных / MS SQL Server /

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

Вот и все ! :)




Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Базы Данных / MS SQL Server /

FAQ по MS SQL 7.0
30-03-2009   

Как запускать-останавливать SQL Server через командную строку? Мне это нужно для использования в скриптах... подробнее

Кол. просмотров: общее - 2081 сегодня - 0

Виртуальная реализация SQL Server 2005
30-03-2009   

Ранее в материале «Разбираем айсберг sql server 2005» читателям предлагалось воспользоваться опубликованной в internet серией информационных выпусков microsoft, посвященных sql server 2005, для более оперативного ознакомления с новыми возможностями продукта. Эти материалы содержат замечательный обзор предполагаемых перспектив, который, однако, не может заменить практики... подробнее

Кол. просмотров: общее - 1788 сегодня - 2

Один из вариантов соглашения об именах объектов MS SQL Server
30-03-2009   

Помните, что имена объектов sql сервера не могут превышать 30 символов. Не используйте зарезервированные слова, специальные символы, и не начинайте имена объектов с цифры. Избегайте использование сокращений... подробнее

Кол. просмотров: общее - 1820 сегодня - 1

Создание и удаление БД в MS SQL Server
30-03-2009   

В sql serverе базы данных хранятся в виде обычных файлов на диске. Как минимум на одну БД приходится таких файлов 2: *.mdf и *.ldf. В первом хранятся сами данные, таблицы, индексы и пр., а во втором находится т.н. transaction log, в котором находится информация необходимая для восстановления БД... подробнее

Кол. просмотров: общее - 2734 сегодня - 1

Создание и удаление таблиц в MS SQL Server
30-03-2009   

Все данные в БД sql server хранятся в таблицах. Таблицы состоят из колонок, объединяющих значения одного типа, и строк - записей в таблице. В одной БД может быть до 2 миллиардов таблиц... подробнее

Кол. просмотров: общее - 3068 сегодня - 1



  © WWW.COMPROG.RU ® Все о программировании - 2009 | Designed and Powered by Zaipov Renat | Разное