Статистика работы PHP и MySQL

verfaa

Профессор
Регистрация
29 Янв 2007
Сообщения
416
Реакции
49
Делаю один проект по фрилансу, заказчик попросил такой функционал:
SQL Time: 0.0015
и SQL запросов: 5

Это я так понимаю общее количество запросов, выполненных при генерации скрипта и общее время, за которое они выполнились.
Для подсчета общего количества запросов я планирую завести статическое свойство в классе и инкреминировать его при каждом SQL запросе. А как посчитать общее SQL Time?
Прошу советов.
 
Последнее редактирование:
Кода много, получается прям лапша из кода, что сильно затрудняет восприятие...

Для подсчета общего количества запросов я планирую завести статическое свойство в классе и инкреминировать его при каждом SQL запросе. А как посчитать общее SQL Time?
Прошу советов.

В функциях которые выполняют db_query и запускают цикл для получения результатов
PHP:
//поставь в начале функции
$time = microtime(true);
...
//в конце
$this->query_time += microtime(true) - $time;

//Перед выводом на экран задай формат:
echo " done (time: " . sprintf('%.3f', $this->query_time) . "s)\n";
Ну или через статик, если тебе так удобнее.
 
Последнее редактирование:
Кода много, получается прям лапша из кода, что сильно затрудняет восприятие...



В функциях которые выполняют db_query и запускают цикл для получения результатов
PHP:
//поставь в начале функции
$time = microtime(true);
...
//в конце
$this->query_time += microtime(true) - $time;

//Перед выводом на экран задай формат:
echo " done (time: " . sprintf('%.3f', $this->query_time) . "s)\n";
Ну или через статик, если тебе так удобнее.
Так ведь тогда будут результаты выполнения 5 запросов отдельно, разве нет? Не проще ли в каждую функцию, где выполняется запрос в БД, добавить какой нибудь $GLOBALS['query']++ и в конце страницы выводить результат?
 
Так ведь тогда будут результаты выполнения 5 запросов отдельно, разве нет? Не проще ли в каждую функцию, где выполняется запрос в БД, добавить какой нибудь $GLOBALS['query']++ и в конце страницы выводить результат?

$this->query_time += (будет суммировать)
Предполагается, что класс БД доступен глобально и для всех запросов используется один и тот же объект. Если это не так используйте статик свойство (переменную). При инициализации присвойте ей 0.
 
$this->query_time += (будет суммировать)
Предполагается, что класс БД доступен глобально и для всех запросов используется один и тот же объект. Если это не так используйте статик свойство (переменную). При инициализации присвойте ей 0.
Каюсь, + в += не заметил :ah:
 
альтернативный вариант - делать через mysql profiling

Код:
mysql_query("SET profiling = 1;");
if(mysql_errno()){die("ERROR ".mysql_errno($link).": ". mysql_error($link));}

$query="SELECT some_field_name FROM some_table_name";
$result = mysql_query($query);
if(mysql_errno()){die("ERROR ".mysql_errno($link).": ". mysql_error($link));}

$exec_time_result=mysql_query("SELECT query_id, SUM(duration) FROM information_schema.profiling GROUP BY query_id ORDER BY query_id DESC LIMIT 1;");
if(mysql_errno()){die("ERROR ".mysql_errno($link).": ". mysql_error($link));}
$exec_time_row = mysql_fetch_array($exec_time_result);

echo "<p>Query executed in ".$exec_time_row[1].' seconds';

альтернативный вариант - делать через mysql profiling

Код:
mysql_query("SET profiling = 1;");
if(mysql_errno()){die("ERROR ".mysql_errno($link).": ". mysql_error($link));}

$query="SELECT some_field_name FROM some_table_name";
$result = mysql_query($query);
if(mysql_errno()){die("ERROR ".mysql_errno($link).": ". mysql_error($link));}

$exec_time_result=mysql_query("SELECT query_id, SUM(duration) FROM information_schema.profiling GROUP BY query_id ORDER BY query_id DESC LIMIT 1;");
if(mysql_errno()){die("ERROR ".mysql_errno($link).": ". mysql_error($link));}
$exec_time_row = mysql_fetch_array($exec_time_result);

echo "<p>Query executed in ".$exec_time_row[1].' seconds';
 
Последнее редактирование модератором:
Назад
Сверху