Как посчитать время выполнения скрипта и количество запросов к MySQL?
Есть у меня один хороший знакомый и у него есть сайт. Время от времени помогаю ему в исправлении разных недоделок на этом ресурсе. Движок там самописный, причем писался такими руками, о прямоте которых я скромно умолчу.
Все было более-менее спокойно до той поры, пока посещаемость сайта была совсем низкой. И вот сайт начал оживать, приближаясь к первой тысяче уников в день… Однако радость была не долгой - движок сайта начал конкретно тупить. Хостер грозит пальцем за чрезмерную нагрузку на MySQL и требует перевести его на выделенный сервер. Я конечно предупреждал своего товарища, что код движка ужасен, и вот решил показать масштабы бедствия наглядно.
Как выяснилось, на формирование некоторых страничек уходило (!) более 450 запросов к базе данных. И это с учетом того, что никакого кеширования в движке нет в принципе. Я не считаю себя программистом, но даже мне ясно, что это явный перебор.
Как посчитать время выполнения скрипта?
Первым делом выясним насколько быстро или медленно формируются странички. Это, пожалуй, самая простая задача, которая может быть решена всего за пару минут для любого сайта. Расписывать подробно что означает та или иная строка кода не буду, приведу уже работающий пример. В начало скрипта помещаем:
<?php $start = microtime(true); ?>
А данную конструкцию в самый конец вашего скрипта:
<?php
$time = microtime(true) - $start;
printf('Скрипт выполнялся %.4F сек.', $time);
?>
Как посчитать количество запросов к MySQL при формировании страницы?
Вот эта задачка гораздо сложнее. В Mysql нет встроенной функции подсчета запросов. Насколько мне известно, нет такой функции и в php, потому её придется писать самим. Суть в том, чтобы каждый запрос к MySQL заменить на обращение к нашей функции, которая уже и будет подсчитывать эти самые запросы.
Минус метода в том, что нам придется немного поковыряться в коде движка, заменяя запросы к MySQL, но иных вариантов я не вижу. В моем случае пришлось пробежаться обычным текстовым редактором всего по 3-4 файлам с заменой одной строки на другую, сделать это можно автоматически. Так что, не такая уж и большая работа получилась. Однако, игра стоит свеч - теперь наглядно можно посмотреть сколько запросов к БД было при формировании той или иной страницы.
Привожу код функции, которая будет делать эту нужную работу (помещаем в начало скрипта):
<?php
$query_count =0;
function do_query($query)
{
$GLOBALS['query_count']++;
return mysql_query($query);
}
?>
Теперь все запросы к БД следует производить через нашу функцию. Выглядит это примерно так:
$sql=do_query("SELECT *....");
Осталось в конце скрипта вывести результаты:
<?php echo 'SQL запросов: '.$query_count; ?>
Вот и все. Теперь у нас есть страшные цифири и пришла пора заняться оптимизацией движка сайта. Но это уже другая тема, о которой еще предстоит рассказать…
Если считаете статью полезной,
не ленитесь ставить лайки и делиться с друзьями.