PHPからMySQLクエリを実行しますが、どれだけ時間がかかるかを知りたいです。PHPからMySQLクエリの実行時間を取得する方法はありますか?
また、実行時間がWebサーバーの負荷に依存するかどうかも疑問に思います。サーバーが他のクエリでビジーな場合、クエリの実行に時間がかかると想像できます。一方、サーバーがビジー状態の場合、クエリは順番を待ってから実行され(クエリは並列に実行されず)、待機時間は実行時間に含まれないことを想像できます。では、どのシナリオ(2つのうち)が正しいでしょうか?
おそらくMySQLを介してこれを行う方法がいくつかありますが、簡単な(そして信頼できる)方法はPHPのmicrotime
関数を使用することです。これは現在の時間をミリ秒で返します。
microtime()は、現在のUnixタイムスタンプをマイクロ秒で返します。この関数は、gettimeofday()システムコールをサポートするオペレーティングシステムでのみ利用可能です。
getasfloat-オプションの引数なしで呼び出された場合、この関数は文字列「msec sec」を返します。secは、 Unixエポック(1970年1月1日0:00:00 GMT)、ミリ秒はマイクロ秒の部分です。文字列の両方の部分が秒単位で返されます。
オプションの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';