如何在PHP中测量MySQL时间、查询的时间和/或负载?

30 浏览
0 Comments

如何在PHP中测量MySQL时间、查询的时间和/或负载?

我需要找到一些衡量我的查询所花费时间和服务器负载的方法,如果可能的话。

我怀疑是否可能,但我想了解CPU使用情况。

有什么想法吗?

0
0 Comments

如何在PHP中测量mysql时间,sql查询的时间和/或负载?

这个问题的出现是因为数据库和Web服务器位于不同的位置,而且您尝试使用PHP来实现它。

限制:

- 您需要同时访问两个服务器(如ssh)。

- 如果在数据库中嵌入CPU负载检查,例如使用exec_shell ssh,然后在每次查询执行时返回uptime,就会过度负荷。

解决方法:

在数据库服务器中嵌入一个cron任务,如果服务器负载过高,定期发送电子邮件。

或者,在数据库中,定期发送电子邮件以报告当前运行的查询,使用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负载。

但是在Windows系统中,您可以通过在Google或SO上进行搜索来找到相关信息。

我正在使用与我的ISP托管包相同的共享服务器,那么我能够区分哪些查询时间/负载是我的问题吗?

- 可以使用show full processlist命令来查看数据库连接。

我询问了我的ISP,要求他们启动show full processlist的分析,并将结果作为记录发送电子邮件或存储在服务器上以供以后访问。

如果您的托管服务器是Windows系统,那么请再次与ISP确认,他们是否有Windows任务计划程序。如果有的话,您可以要求ISP每分钟监视show full processlist命令,并将结果发送为电子邮件,或在服务器上输出到一个位置。这样,当服务器负载升高时,您可以查看同时运行的查询。如果没有明显的慢查询,那么可能是您的应用程序不是问题的原因。

如果没有这样的任务可用,您可以尝试在您的Windows Web服务器上设置定时任务,并执行show full processlist命令来监视数据库。

然而,将show full processlist的结果解析并过滤出自己的查询项,然后发送电子邮件,可能相对困难。

更简单的方法是准备一个PHP脚本,执行show查询,迭代结果(使用fetch_row),并使用类似“20101122080000”的文件名将结果fputcsv到文件中。请参考上述代码示例。

0
0 Comments

问题的原因:用户想要在PHP中测量MySQL查询的时间和/或负载,以便进行错误处理和发送邮件通知。

解决方法:通过查看查询分析器来测量查询时间。用户可以在脚本的开头启用查询分析器,并在结束时执行"show profiles"查询。用户可以使用他们熟悉的标准PHP函数。

以下是原始内容的整理:

有一个查询分析器,可以部分满足您的需求。

https://www.digitalocean.com/community/tutorials/how-to-use-mysql-query-profiling

https://dev.mysql.com/doc/refman/5.5/en/show-profile.html

有各种工具可以查看服务器的负载。

但是我看不到如何在php中输出这个?我真的希望在php中有一些错误处理,如果情况变得糟糕,我可以发送电子邮件。

您可以在脚本的开头启用分析,然后在最后执行show profiles查询。您可以使用您习惯使用的标准PHP函数。

链接不存在了。

链接又坏了。

0
0 Comments

问题的原因是用户想要测量MySQL查询的时间和/或负载,以便确定查询的执行效率。用户给出了一个PHP代码示例来计算查询的执行时间。然后用户提出了几个问题:1. 如果数据库和Web服务器位于不同的服务器上,该方法将无法区分数据库是否运行缓慢还是Web服务器是否运行缓慢。2. 考虑到PHP页面只是等待MySQL查询完成,这种方法可能已经足够好来确定查询的执行时间。但是,这种方法无法帮助用户找到CPU使用率。答案是,这个方法只能测量墙时而不是CPU时间。

为了解决这个问题,可以使用MySQL的内置函数来测量查询的执行时间和负载。在查询之前,使用microtime()函数来获取开始时间。然后执行查询。查询完成后,再次使用microtime()函数获取结束时间。最后,计算开始时间和结束时间的差异,即可得到查询的执行时间。

以下是修改后的代码示例:

$starttime = microtime(true);
$query = mysql_query("SELECT * FROM table");
$endtime = microtime(true);
$execution_time = $endtime - $starttime;
echo "Query Execution Time: " . $execution_time . " seconds";

这样,用户就可以通过$execution_time变量获取查询的执行时间了。注意,microtime()函数的参数设置为true,以便返回一个浮点数表示的时间。

通过这种方法,用户可以准确地测量查询的执行时间,而不受数据库和Web服务器位于不同服务器的影响,并且可以避免使用墙时作为测量标准。

0