Подтвердить что ты не робот

Как получить время выполнения запроса MySQL из PHP?

Я выполняю MySQL-запросы от PHP и хотел бы знать, сколько времени они занимают. Есть ли способ получить время выполнения запроса MySQL из PHP?

Я также задаюсь вопросом, зависит ли время выполнения от того, насколько загружен веб-сервер. Я могу представить, что для выполнения запроса потребуется больше времени, если сервер занят другими запросами. С другой стороны, я могу представить, что если сервер занят, запрос будет просто ждать своего хода, а затем он будет выполнен (без каких-либо запросов, выполняемых параллельно), а время ожидания не будет включено во время выполнения, Итак, какие сценарии (из двух) верны?

4b9b3361

Ответ 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.