我需要找一些衡量我的查询所用时间以及服务器负载的方法。
我怀疑它可能,但我也希望获得cpu使用。
有什么想法吗?
答案 0 :(得分:21)
PHP语法
$starttime = microtime();
$query = mysql_query("select * from table");
$endtime = microtime();
然后计算$ starttime和$ endtime之间的差异。
答案 1 :(得分:6)
查看查询分析器。这可能会查询您所需的查询时间位。
https://www.digitalocean.com/community/tutorials/how-to-use-mysql-query-profiling
https://dev.mysql.com/doc/refman/5.5/en/show-profile.html
有各种工具可以查看服务器上的负载
答案 2 :(得分:2)
鉴于您的数据库和Web服务器的位置不同,几乎是不可能的 再加上你试图用PHP实现它
限制
uptime
,那么就是矫枉过正的解决方法
在您的数据库服务器中嵌入一个cronjob,
如果服务器负载很高,则定期发送电子邮件
或者
在数据库中,
使用
定期发送有关当前运行查询的电子邮件
show full processlist
存储SHOW FULL PROCESSLIST的示例
$con = mysqli_connect(...) or die('unable to connect');
$sql = "show full processlist";
$res = mysqli_query($con, $sql) or die($sql);
/* optional path is /tmp */
$fp = fopen('/tmp/'.date('YmdHis'), 'w+');
while ($row = $res->fetch_row())
{
fputcsv($fp, $row);
}
$res->free_result();
以上内容应足以将当前的mysql进程列表转储到文件中 在linux框中,有许多命令允许用户显示CPU负载 但是窗口,我想你可以通过搜索谷歌的SO搜索
答案 3 :(得分:0)
使用
可以获得有关数据库的大量信息SHOW STATUS;
查询。
我认为Last_query_cost变量对于测量目的非常有用。和Slow_queries一样,它会显示运行时间超过一定时间的quires数量。这些变量的完整列表在http://dev.mysql.com/doc/refman/5.1/en/server-status-variables.html 还有一个php函数mysql_stat() php函数,它返回一些数据库使用数据。例如,每秒查询可能有点用处。 但是要掌握更确定的数据将需要ssh访问数据库。
答案 4 :(得分:0)
使用microtime
来衡量查询所需的时间。
有关服务器负载,请参阅http://www.php.net/manual/en/function.sys-getloadavg.php。 CPU使用率大多不相关,因为mysql在大多数情况下都会被磁盘限制。
答案 5 :(得分:0)
有关更详细的统计信息,您应该使用mysqli :: get_connection_stats(如果您使用的是php 5.3 +)
http://www.php.net/manual/en/mysqli.get-connection-stats.php
答案 6 :(得分:0)
PHP实际上只能计算mysql_query()
执行时间,包括整个往返,延迟和传输时间。要进行分解,您需要使用已经提到的MySQL分析器。以下代码应输出您需要知道的信息。如果要将分析合并到PHP过程中,则必须使用分析器并从information_schema.profiling
表中选择相关字段,但如果只是为了检查性能,则下面的内容就足够了。
<?php
$con = mysql_connect("localhost","root","my-password");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my-database", $con);
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
mysql_query("set profiling=1;");
$starttime = microtime_float();
$query = mysql_query("SELECT * FROM my-table");
$endtime = microtime_float();
$trans_result = mysql_query("select sum(duration) as transtime from information_schema.profiling where query_id=1");
$transtime = mysql_result($trans_result, 0, 'transtime');
$total_time = ($endtime - $starttime);
$transtime = ($total_time - $transtime);
echo 'Total time: '.$total_time.' secs<br />';
echo 'Transfer time: '.$transtime.' secs<br />';
echo 'Query time break-down;<br />';
$debug_result = mysql_query("show profile cpu for query 1;");
while ($row = mysql_fetch_assoc($debug_result)) {
echo $row['Status'].' (Time: '.$row['Duration'].', CPU_User: '.$row['CPU_user'].', CPY_sys: '.$row['CPU_system'].')<br />';
}
?>
一旦您对性能感到满意,请删除除所需的MySQL查询以外的所有内容。