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