Я выполняю MySQL-запросы с PHP и хотел бы знать, сколько времени они занимают. Есть ли способ получить время выполнения запроса MySQL из PHP?
Я также задаюсь вопросом, зависит ли время выполнения от того, насколько загружен веб-сервер. Я могу представить, что для выполнения запроса потребуется больше времени, если сервер занят другими запросами. С другой стороны, я могу представить, что если сервер занят, запрос будет просто ждать своего хода, а затем он будет выполнен (без каких-либо запросов, выполняемых параллельно), а время ожидания не будет включено во время выполнения , Итак, какие сценарии (из двух) верны?
Вероятно, есть какой-то способ сделать это через MySQL, однако простой (и надежный) способ использует функцию microtime
PHP, которая возвращает текущее время в миллисекундах.
microtime () возвращает текущую временную метку Unix с микросекундами. Эта функция доступна только> в операционных системах, поддерживающих системный вызов gettimeofday ().
getasfloat – при вызове без необязательного аргумента эта функция возвращает строку «msec sec», где sec – текущее время, измеренное в секундах от момента Unix Epoch (0:00:00 1 января 1970 года по Гринвичу), а msec – микросекундная часть. Обе части строки возвращаются в единицах секунд.
Если опция get_as_float установлена в TRUE, возвращается поплавок (в секундах).
Пример кода:
$sql = '...'; $msc = microtime(true); mysql_query($sql); $msc = microtime(true)-$msc; echo $msc . ' s'; // in seconds echo ($msc * 1000) . ' ms'; // in millseconds
microtime()
требует времени для выполнения. Если вы хотите получить данные прямо из mysql, сделайте это …
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, вы можете использовать общий журнал.
Если он еще не включен, включите его:
SET GLOBAL general_log = 'ON';
Чтобы просмотреть данные после запуска запроса:
SELECT * FROM mysql.general_log;
Помимо прочего, вы получите время выполнения запроса, точно так же, как вы, вероятно, видели в phpmyadmin.